SOCKET通信,接收数据分段。

antcy_18 2014-04-18 08:48:34
我有个客户端,不停地在接收服务端发送过来的数据。
例:
第一行数据
第二行数据
第三行数据
我接收的BYTE数组大小为1024,可以看出以上的数据长度并没有超出1024,
我的问题是,以上三行数据,我经常会分段收到,一次接收并没有收到完整的三行数据,而是,可能要分两次才能收到完整的。
用TCP调试助手并没有这样的问题,请问如何解决?



if (sockClient.Poll(100, SelectMode.SelectRead))
{
length = sockClient.Receive(arrMsg); // 接收数据,并返回数据的长度;

}
...全文
481 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
X_SpringSun 2014-04-18
  • 打赏
  • 举报
回复
你可以自己写协议,先将发送的数据大小发送到服务端例如 下次我要发送_size字节。然后接收_size字节 buffer = new byte[_size]; int total = 0; int recv; int size = _size; int dataleft = size; while (total < size) { recv = socketConnection.Receive(buffer, total, dataleft, SocketFlags.None); if (recv == 0) { break; } total += recv; dataleft -= recv; }
guxingfeiyu 2014-04-18
  • 打赏
  • 举报
回复
分段收到是正常的,需要做好粘包的处理。 http://zhidao.baidu.com/link?url=mL6WFp1sbTNCYJXmyuzCsIN4OB49aM49N3s-tp631G57iCI9nCN8h12zvakffP8qKeobHTzBt9XO1Rvray0iW_

111,097

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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