我用多播套接字编写了一个简单的 udp 服务器客户端应用程序。服务器每 6 毫秒向三个客户端发送数据包。数据包大小为 1200 字节。这是每秒 166,66 个数据包。每当其中一个客户端检测到丢失的数据包时,它都会通过单播向服务器发送一个 NACK 数据包。
第一次测试: 服务器和三个客户端通过以太网连接到路由器 TP-Link TL-WDR4300 (dd-wrt),一切正常。
第二次测试: 只有服务器通过以太网连接到路由器,其他客户端通过无线 2.4 GHz 和固定信道连接。无线出现了两个问题:第一个问题是丢包,客户端只接收到 50% 的数据包。并且丢失出现在突发中,例如收到 400 个数据包,丢失 200 个等。第二个问题是,当客户端将 NACK 数据包发送回服务器时,我可以在 Wireshark 上看到,但我的应用程序无法接收它们。这很奇怪,因为代码与客户端通过以太网连接时的代码相同。那么,有什么想法吗?我会很感激
服务器代码:
while (1) {
FD_ZERO(&readfds);
FD_SET(sd, &readfds);
tv.tv_sec = 0;
tv.tv_usec = 0;
rv = select(sd + 1, &readfds, NULL, NULL, &tv);
while (rv == 1) {
nack_processing(sd);
rv = select(sd + 1, &readfds, NULL, NULL, &tv);
}
}
return 0;
}
我还进行了更新以减少流量:数据包大小:800 字节数据包之间的到达时间:10 毫秒 = 每秒 100 个数据包 = 0.076 MB / s
我测量了服务器端和客户端的流量:服务器 ~ 10 MB/s 客户端 ~ 5 MB /s
一切似乎都很好