机器A, B 在局域网内
udp server s1 和程序a 在机器 A 上
程序b 在机器B 上
a 发数据 --> s1
s1 把收到的数据 --> b
也就是 s1 是中转
数据都是放在队列中,偶的同步不怎么好,a,b,s1都是从队列里取到数据就处理,这样可能有数据丢失
本来是 B上数据丢失很多,
偶然的偶在A上打开了sniffer,发现B收到的数据基本很完整了,很少丢失,哈哈,真是晕啊
偶想是不是本来发的太快了,打开sniffer 后发的慢了,b 的速度就跟上了
各位发表下自己的看法,不胜感激!
udp server s1 和程序a 在机器 A 上
程序b 在机器B 上
a 发数据 --> s1
s1 把收到的数据 --> b
也就是 s1 是中转
数据都是放在队列中,偶的同步不怎么好,a,b,s1都是从队列里取到数据就处理,这样可能有数据丢失
本来是 B上数据丢失很多,
偶然的偶在A上打开了sniffer,发现B收到的数据基本很完整了,很少丢失,哈哈,真是晕啊
偶想是不是本来发的太快了,打开sniffer 后发的慢了,b 的速度就跟上了
各位发表下自己的看法,不胜感激!
另外如果发送端发送数据过快,接收端接收数据慢(可能正在处理其他数据)。接受缓冲区满后
udp是会直接将后来的数据丢弃的,因为udp不使用滑动窗口来协调双方发送和接受速度。
这样只能缓解丢包率(检查一下客户端机器是否比服务器端快,另外服务器的编写方式不好也可能造成没有及时从socket 缓冲区接收数据,导致缓冲区满) 2.也有可能是一小部分数据包在客户端,就被丢弃了;或者被服务器端的网络接口卡丢弃了。 3.总之,局域网之内发生很小的丢包率是正常的。丢包后需要客户端重新发送数据