DELPHI盒子
!实时搜索: 盒子论坛 | 注册用户 | 修改信息 | 退出
检举帖 | 全文检索 | 关闭广告 | 捐赠
技术论坛
 用户名
 密  码
自动登陆(30天有效)
忘了密码
≡技术区≡
DELPHI技术
lazarus/fpc/Free Pascal
移动应用开发
Web应用开发
数据库专区
报表专区
网络通讯
开源项目
论坛精华贴
≡发布区≡
发布代码
发布控件
文档资料
经典工具
≡事务区≡
网站意见
盒子之家
招聘应聘
信息交换
论坛信息
最新加入: fiscan1
今日帖子: 1
在线用户: 0
导航: 论坛 -> 网络通讯 斑竹:liumazi,sephil  
作者:
男 crestxa (crestxa) ★☆☆☆☆ -
普通会员
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的,有没有更好的方式,谢谢!
----------------------------------------------
-
作者:
男 hnxxcxg (咏南中间件) ★☆☆☆☆ -
盒子活跃会员
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/
作者:
男 wr960204 (武稀松) ★☆☆☆☆ -
盒子活跃会员
2020/9/28 9:43:52
2楼: 本来就不保证是一帧发送的,你收的时候可以一次性读,也可以连续读拼起来
----------------------------------------------
武稀松http://www.raysoftware.cn
作者:
男 wg961423 (麦子仲肥) ★☆☆☆☆ -
盒子活跃会员
2020/9/28 14:22:58
3楼: 我一般是一次发送,2次接收,发送前把长度和内容都放到流中,Indy会自己拆成小包一个一个发的,接收时先收一次长度,再按长度来收后面的内容。
----------------------------------------------
-
作者:
男 pcplayer (pcplayer) ★☆☆☆☆ -
普通会员
2020/9/29 2:39:23
4楼: 楼主你把问题搞复杂了。

发送端只管发。接收端开个缓冲收。

你可以拿 TIdFTPClient 和 TIdFTPServer 的源代码来看。
----------------------------------------------
-
作者:
男 gmxyb (gmxyb) ★☆☆☆☆ -
普通会员
2020/9/29 7:08:06
5楼: ...楼上一堆大佬在做科普~
----------------------------------------------
-
作者:
男 sail2000 (小帆工作室) ★☆☆☆☆ -
盒子活跃会员
2020/9/30 8:46:16
6楼: 切片发,我最喜欢一次发16K。
----------------------------------------------
delphi 是兴趣,和工作无关,即使它倒闭。又不靠它 delphi 吃饭,怕甚?
作者:
男 supermay (supermay) ★☆☆☆☆ -
盒子活跃会员
2020/9/30 11:10:33
7楼: 分数据帧发这个是TCP协议的东西呀。
接收那边不但要考虑数据分包还要考虑数据粘包的问题呀。
----------------------------------------------
链接:https://pan.baidu.com/s/12jzmECYKhGCsHBxz8tmB6w 提取码:pelr --来自百度网盘超级会员V9的分享
信息
登陆以后才能回复
Copyright © 2CCC.Com 盒子论坛 v3.0.1 版权所有 页面执行64.45313毫秒 RSS