TMemoryStream 里面的内容怎么拆分?

nimeide1234567890 2017-01-07 03:15:42
我做一个发送信息的功能A电脑发送服务端,服务端转发给B电脑。
之前发送的只有文字,比如接收方IP地址,编号,发送的文字,用分隔符隔开,服务端拆分后就知道转发给谁了
IdTCPClient2.WriteLn(ip+':'+bh+'*'+bh2+'?'+RxRichEdit1.Text);

现在我要做图片和文字一起发送,改了用TMemoryStream,把RxRichEdit1里的图片和文字当成内存流发送
ms:=TMemoryStream.Create;
RxRichEdit1.Lines.SaveToStream(ms);
i:=ms.Size;
IdTCPClient2.WriteInteger(i);
IdTCPClient2.WriteStream(ms);
现在问题来了,接收方IP,还有编号等内容怎么发送过去?
一起放到内存流发送过去,然后服务端拆开吗?
如果可以,那么服务端怎么拆开内存流里的内容?
...全文
96 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
nimeide1234567890 2017-01-07
  • 打赏
  • 举报
回复
搞定了,谢谢。
nimeide1234567890 2017-01-07
  • 打赏
  • 举报
回复
接收到的内容类似: {\rtf1\ansi\ansicpg936\deff0\deflang1033\deflangfe2052{\fonttbl{\f0\fnil\fcharset134 MS Sans Serif;}} \viewkind4\uc1\pard\lang2052\f0\fs16 192.168.252.1:\par 001*\par 001?\par \pard 2\par \pard\par } ......
nimeide1234567890 2017-01-07
  • 打赏
  • 举报
回复
引用 1 楼 santiaodahan 的回复:
这相当于自定义一个通信协议。自己设计好格式,有格式标记。接收时按标记区分哪些是命令、参数,哪些是消息数据。
A客户端发送 ms_send:=TMemoryStream.Create; RxRichEdit3.Lines.SaveToStream(ms_send); i:=ms_send.Size; IdTCPClient2.WriteInteger(i); IdTCPClient2.WriteStream(ms_send);//发送的是图片和文字 服务端接收 ss:=TStringStream.Create(''); msize:=AThread.Connection.ReadInteger(); AThread.Connection.ReadStream(ss,msize); RxRichEdit1.Lines.Add(ss.DataString);//这里能显示图片和文字 服务端转发 AThread.Connection.WriteInteger(msize); AThread.Connection.WriteStream(ss); B客户端接收 ss := TStringStream.Create(''); FClient.ReadStream(ss,sizeof(ss)); RxRichEdit2.Lines.Add(ss.DataString); 结果显示的全是字符,没有图片,怎么回事?
santiaodahan 2017-01-07
  • 打赏
  • 举报
回复
这相当于自定义一个通信协议。自己设计好格式,有格式标记。接收时按标记区分哪些是命令、参数,哪些是消息数据。

2,495

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧