|
|
导航: |
论坛 -> 网络通讯
斑竹:liumazi,sephil |
|
作者: |
|
2020/9/27 18:14:20 |
标题: |
IdTCPClient 发送数据的问题 |
浏览:1981 |
|
加入我的收藏 |
楼主: |
使用客户端发送一个MS:TmemoryStream,现象是对方收到是断续的,就是不是一帧发送出去的。 if IdTCPClient1.Connected then SendStream(IdTCPClient1, MS);
函数如下 function SendStream(AClient: TIdTCPClient; AStream: TStream): Boolean; overload; var StreamSize : LongInt; begin Result := True; try StreamSize := (AStream.Size); AStream.Seek(0, soFromBeginning); AClient.IOHandler.LargeStream := True; AClient.IOHandler.SendBufferSize := StreamSize ; //AClient.IOHandler.Write(LongInt(StreamSize)); // 发送数据长度 AClient.IOHandler.WriteBufferOpen; AClient.IOHandler.Write(AStream, LongInt(StreamSize)); AClient.IOHandler.WriteBufferFlush; finally AClient.IOHandler.WriteBufferClose; end; Result := True; end;
请教一下大家都是怎么发送TmemoryStream的,有没有更好的方式,谢谢!
----------------------------------------------
- |
作者: |
|
2020/9/28 7:54:49 |
1楼: |
假设你的AStream大小是一百兆,你希望IdTCPClient会帮你打成一个大小是一百兆的数据包发送出去? https://www.cnblogs.com/hnxxcxg/p/10258884.html 这里是你想要的答案 https://www.cnblogs.com/hnxxcxg/p/10258842.html INDY有源码可以看的。 事实上,一个数据包的大小,我见过有4K、32K、60K、64K。。。。。。的。一般不会有更大的,你知道为什么吗?
----------------------------------------------
中间件QQ群: 92449782 博客: http://www.cnblogs.com/hnxxcxg/
|
作者: |
|
2020/9/28 9:43:52 |
2楼: |
本来就不保证是一帧发送的,你收的时候可以一次性读,也可以连续读拼起来
----------------------------------------------
武稀松http://www.raysoftware.cn
|
作者: |
|
2020/9/28 14:22:58 |
3楼: |
我一般是一次发送,2次接收,发送前把长度和内容都放到流中,Indy会自己拆成小包一个一个发的,接收时先收一次长度,再按长度来收后面的内容。
----------------------------------------------
-
|
作者: |
|
2020/9/29 2:39:23 |
4楼: |
楼主你把问题搞复杂了。
发送端只管发。接收端开个缓冲收。
你可以拿 TIdFTPClient 和 TIdFTPServer 的源代码来看。
----------------------------------------------
-
|
作者: |
gmxyb (gmxyb) |
★☆☆☆☆ |
-
|
普通会员 |
|
2020/9/29 7:08:06 |
5楼: |
...楼上一堆大佬在做科普~
----------------------------------------------
-
|
作者: |
|
2020/9/30 8:46:16 |
6楼: |
切片发,我最喜欢一次发16K。
----------------------------------------------
delphi 是兴趣,和工作无关,即使它倒闭。又不靠它 delphi 吃饭,怕甚?
|
作者: |
|
2020/9/30 11:10:33 |
7楼: |
分数据帧发这个是TCP协议的东西呀。 接收那边不但要考虑数据分包还要考虑数据粘包的问题呀。
----------------------------------------------
链接:https://pan.baidu.com/s/12jzmECYKhGCsHBxz8tmB6w 提取码:pelr --来自百度网盘超级会员V9的分享
|
|