UDP接收数据的完整性判断

ztest8 2010-05-21 02:53:16
采用UDP接收大块数据:

我先在发送端将数据拆分为带序号的1KB大小的若干小单元,然后在while中分次发送出去,每次发送10次(共10K)。

在接收端可能无法完整接受到10K中的全部数据包,我的问题是,怎么判断接收全部完成,何时设置超时(因为不同客户端网速差别可能很大)?
...全文
398 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
许文君 2010-05-24
  • 打赏
  • 举报
回复
mark下,这个问题从未深思过
zoumingmozhe 2010-05-24
  • 打赏
  • 举报
回复
可以参考TCP协议的原理来进行。呵呵
Eleven 2010-05-24
  • 打赏
  • 举报
回复
ls的都已经说了,这个需要自己定义协议,定义包头,加个序列号,如果对方未收到,就需要重发该包,和TCP的比较类似。。。
lingxiao66 2010-05-23
  • 打赏
  • 举报
回复
10k 大小应该不需要分包才对

udp一般支持最大64k数据

如果要分包的话 把每包标上序号 做一个acker 收到一包再发下一包 一直到收完

但是个人觉得大的包应该用tcp传输
sanguomi 2010-05-23
  • 打赏
  • 举报
回复
我以前做过,一 种按顺序插,每次读取指定长度的字节,然后发送,然后等待服务端确认,主要确认接受的大小,返回包,如果返回成功,继续下一个,如果没返回,继续发上次包, 最后一次发送文件尾
还有种就是带序号,开很多线程一起发,服务端创建同样大小的空数据,根据收到的包数据和序号,对应序号插进去,最后接收完,数据也是完整的
周药师 2010-05-23
  • 打赏
  • 举报
回复
自己定义好协议
UDX协议 2010-05-23
  • 打赏
  • 举报
回复
每个包一个序号,接收端,可根据序号来判断
ztest8 2010-05-21
  • 打赏
  • 举报
回复
判断完整性主要是为了传文件
ztest8 2010-05-21
  • 打赏
  • 举报
回复
谢谢你的回复,由于我在做一个视频聊天模块,里面用到了打洞,所以是UDP的,不过你说的“重发->丢失->再重发->再丢失->再再...”确实可能出现,谢谢提醒!
yanran_hill 2010-05-21
  • 打赏
  • 举报
回复
分组与打包,每个包都有包编号,针对某个包丢失的场合,要通知对方重发,还有注意避免由于重发->丢失->再重发->再丢失->再再...丢失而引起数据阻塞的问题
一般而言,TCP在这方面做得很好,我们可以直接使用TCP而不必关心这些问题了不得,建议你去参考TCP的相关内容

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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