麻烦问一下 问题解决了吗 我现在也遇到同样的问题
一个线程接收数据 一个线程处理数据
在处理数据线程里,我想判断UDP接收完毕,然后开启另个线程去判断接收的数据是否完整 需要重发包序号。 可是一直判断不好。。常常包没收完 就要服务器重发了,导致很浪费
比方说服务器发来100个包,我收完数据再检查少哪几个包 可现在 我是收到20个包 我就去检查了 然后又让服务器重发了80个包。。
上面说的都没有任何用处,无论是你自己的判定队列为空,还是后面说一共有多少包。 因为udp本质上就是他就是拿掉了握手和传输顺序校验的tcp,所以他本身就不保证一定能收到,也不保证收到的顺序一定是发送的顺序。 so如果一定是udp,就只有2条路 1.采用每包验证方式,发送端每包都需要客户端确认,超时没确认的他自己重发(不需要你去提醒),重发多少次依旧无确认,发送端认为失败,记录日志 2.发送端不管确认,那么需要在接收端设置超时,比如我规定这个session没达到总包数,并且收到的最后一个包后多长时间没有收到其他包了,引发重发申请机制
[quote=引用 4 楼 loveljy_19901114 的回复:] [quote=引用 2 楼 m0_37646670的回复:]比方说服务器发来100个包,我收完数据再检查少哪几个包 可现在 我是收到20个包 我就去检查了 然后又让服务器重发了80个包。。
[quote=引用 2 楼 m0_37646670的回复:]比方说服务器发来100个包,我收完数据再检查少哪几个包 可现在 我是收到20个包 我就去检查了 然后又让服务器重发了80个包。。
110,536
社区成员
642,578
社区内容
加载中
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧