Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 多播套接字丢包_C_Sockets_Networking_Multicast - Fatal编程技术网

C 多播套接字丢包

C 多播套接字丢包,c,sockets,networking,multicast,C,Sockets,Networking,Multicast,我用C语言编写了简单的多播服务器和客户端程序。然后,我通过以太网接口将服务器连接到支持多播的路由器dd wrt。客户端通过无线接口连接到路由器。我每10毫秒将数据包从服务器发送到客户端。数据包大小为512字节。问题是客户端只接收到我在Wireshark中也能看到的40%的数据包。这不是无线和数据包丢失的问题,而是多播的问题,我不知道问题出在哪里。我还检查了数据速率,一切似乎都正常。有什么建议吗?Thx多播通过UDP运行。UDP没有用于数据包丢失恢复的功能。你看到的是地方病。如果您想要可靠性,您必

我用C语言编写了简单的多播服务器和客户端程序。然后,我通过以太网接口将服务器连接到支持多播的路由器dd wrt。客户端通过无线接口连接到路由器。我每10毫秒将数据包从服务器发送到客户端。数据包大小为512字节。问题是客户端只接收到我在Wireshark中也能看到的40%的数据包。这不是无线和数据包丢失的问题,而是多播的问题,我不知道问题出在哪里。我还检查了数据速率,一切似乎都正常。有什么建议吗?Thx

多播通过UDP运行。UDP没有用于数据包丢失恢复的功能。你看到的是地方病。如果您想要可靠性,您必须自己构建。

取决于您如何生成数据包。。最明显的UDP数据包丢失是由于缓冲区溢出造成的。我可以做些什么来修复缓冲区溢出?数据包为字符[512],通过sendto函数发送。您需要在接收器套接字中设置SO_RCVBUF选项。但是,在没有看到代码的情况下,我无法确定。代码非常庞大,但我可以复制您感兴趣的部分,只要告诉我哪一部分和哪一边:服务器或客户端,我应该在客户端设置哪个值?如何计算缓冲区?是的,我知道。我还建立了重传机制。但是,数据包丢失的问题并不是因为UDP可靠性或无线链路,而是可能与缓冲区大小或其他参数有关的其他问题。现在我再次测试了我的系统,当数据包足够小时,数据包丢失也很小,大约2%。然后我将数据包大小增加到1400字节,数据包丢失率为50%,1400字节没有碎片。然后我使用了setsockopt函数并将缓冲区大小设置为65000,但仍然有大约40%的数据包丢失,这不是因为UDP的可靠性。如何解决此问题?请设置更多UDP缓冲区。。大约20万。大约2MB。UDP有效负载大小的公认限制为534字节。这不会被分割,因此数据包只能全部丢失。一旦出现碎片,任何碎片的丢失都意味着整个碎片的丢失;然后在客户端使用setsockopt和SO_RCVBUF,但对于大数据包,比如1400字节没有碎片,我看到wireshark打开时,数据包丢失率约为50%……有什么想法吗?想法是使用比路径MTU小的数据包。534是普遍接受的。