Delphi TClientSocket 接收数据长度不稳定

微笑着独行 2016-10-31 11:08:27
请问各位大侠,有没有遇到这种情况??
服务端是C#编写
客户端为Delphi ,用的TClientSocket,非阻塞模式

问题是,客户端在接收时10条数据,加密后大小在2K多,每次接收的情况不同,有时候可以一次性都接收到、有的时候就只能分两次接收,如果是第二种情况,在解密就会失败!你们谁遇到过,求大侠指点迷津,这到底是什么原因?????!!!!!
...全文
1363 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
coco_boy 2016-11-06
  • 打赏
  • 举报
回复
传输途中被路由器啥的拆分或者合并包了
不得闲 2016-11-04
  • 打赏
  • 举报
回复
这个是属于粘包的处理问题,网络的情况是很复杂的,所以你指望你一个事件把你的发送包全部接收完成,这个是不太现实的,如果服务端发送多个包的时候,甚至可能存在一次性接收了多个包,所以,你在接收事件中要做的就是把数据接收了都写入到缓存中去,然后单独开线程去处理缓存,或者可以直接在接收位置处理,不过不是立即处理,而是也是应该处理缓存。
微笑着独行 2016-11-04
  • 打赏
  • 举报
回复
引用 4 楼 leeky 的回复:
做通信(网络 or 串口等),最基本的要考虑分包情况嘛,缓冲机制是必要的。
如果说不做,只是像我那样简单的接收,为何会出现我说的那种情况
lizjf 2016-11-03
  • 打赏
  • 举报
回复
应该通讯问题,最好做一个等待然后循环接收,或者发送回来一个大小,如果不等于则循环接收
lyhoo163 2016-11-01
  • 打赏
  • 举报
回复
问题可能是,客户端ClienDataSet与服务器的匹配有问题,2k的数据应该一次性能传输和接收。
mdejtod 2016-11-01
  • 打赏
  • 举报
回复
读取到数据后写入缓存,达到你的要求后再进行处理(解密)
leeky 2016-11-01
  • 打赏
  • 举报
回复
做通信(网络 or 串口等),最基本的要考虑分包情况嘛,缓冲机制是必要的。
微笑着独行 2016-11-01
  • 打赏
  • 举报
回复
引用 2 楼 lyhoo163 的回复:
问题可能是,客户端ClienDataSet与服务器的匹配有问题,2k的数据应该一次性能传输和接收。
服务端并没有对数据的发送做处理,只要有就发送了 客户端也是,只要有就接收了

1,593

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 网络通信/分布式开发
社区管理员
  • 网络通信/分布式开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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