SOCKET通信,接收数据分段。

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



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

}
...全文
506 2 打赏 收藏 转发到动态 举报
写回复
用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_
【源码免费下载链接】:https://renmaiwang.cn/s/xkbt5 在Android平台上,大文件的上传是一项挑战,因为考虑到网络稳定性、设备性能以及用户体验等因素。在标题"android大文件分段上传"中提到的方法,是通过使用Socket流将大文件分段进行上传,这是一种有效应对大文件传输问题的策略。下面我们将详细探讨这一技术。了解Socket的基本概念。Socket是网络编程中的一个接口,它允许两个网络应用程序之间建立通信连接,进行数据交换。在Android中,我们可以使用java.net.Socket类来创建和管理Socket连接。分段上传的步骤通常包括以下几个关键环节:1. **文件分段**:在上传前,我们需要将大文件分割成多个小块,每一块可以设定为一定的大小,如1MB或2MB。这可以通过Java的FileInputStream和FileChannel类实现,通过seek()和transferTo()方法读取并写入指定范围的文件内容。2. **建立Socket连接**:使用Socket创建与服务器的连接。需要指定服务器的IP地址和端口号,可以通过Socket的构造函数完成。同时,考虑到网络异常,需要做好异常处理和重试机制。3. **数据传输**:对每个分段进行上传。创建Socket的OutputStream,并利用它写入每个文件段的数据。可以使用DataOutputStream封装数据,以便添加必要的控制信息,如文件段的编号、总段数等。4. **服务器端接收**:服务器端也需要监听特定端口,接受Socket连接。当接收到数据后,根据控制信息将各段数据按顺序存储,并校验数据完整性。5. **断点续传**:为了应对网络中断或失败情况,可以实现断点续传功能。客户端保存已上传的文件段信息,当重新发起上传时,可以从已上传的最后一个段开始继续。6. **错误处理与确

111,126

社区成员

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

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

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