当前位置: 技术问答>linux和unix
飞秋聊天程序UDP接收问题
来源: 互联网 发布时间:2017-02-20
本文导语: 这也是面试的时候遇到的,就是说:当飞秋在上线广播的时候,假如局域网里面有很多用户在线,(在局域网做的飞秋,上线时会广播自己上线,然后在线的人回复一个“我在线”的信息,然后我都接收下来)问题出...
这也是面试的时候遇到的,就是说:当飞秋在上线广播的时候,假如局域网里面有很多用户在线,(在局域网做的飞秋,上线时会广播自己上线,然后在线的人回复一个“我在线”的信息,然后我都接收下来)问题出来了;
1、是否会出现丢信息?这个好像会。
2、怎么避免这个问题?是否可以修改setsockopt()RECVBUFF的大小,一般是按什么依据来修改这个大小;
1、是否会出现丢信息?这个好像会。
2、怎么避免这个问题?是否可以修改setsockopt()RECVBUFF的大小,一般是按什么依据来修改这个大小;
|
TCP是可靠通信,发送端如果接收不到ACK就会定时重发,所以对于TCP来说,RCVBUF的大小只是一个优化手段,不是必须的。
UDP是不可靠的报文通信,如果接收端的RCVBUF满了,发送端和接收端都不知情,除非定制一个协议(接收端模拟ACK应答),否则在包流量比较大的情况下接收端会因为RCVBUF满而丢失包。
所以,前提是局域网(网络传输不会丢包)的情况下,尽量增加RCVBUF就很必要了,你可以考虑飞秋的报文的最大尺寸,考虑通信频率,计算出一个最高的带宽就可以了。
|
UDP协议是不可靠的,当高流量的时候,网卡驱动缓冲区满的时候会出现丢包!