我正在编写一个由两个不同程序组成的应用程序。一个(客户端)发送 UDP 广播数据包,另一个(服务器)记录收到的任何数据包。
该应用程序是用 Qt 编写的——我基本上采用了UDP Multicast 示例并将其用于服务器。客户端看起来像这样:
QUdpSocket * socket = new QUdpSocket;
QByteArray datagram("This is a test!");
socket->writeDatagram(datagram.data(), datagram.size(),
QHostAddress::Broadcast, 45454);
该代码确实有效 - 但非常糟糕。到达的数据包很少(我计算到大约 3.1%)。现在我完全明白 UDP 并不能保证所有数据包都会到达而不会丢失任何数据包 - 但 3.1% 似乎很荒谬,让我想知道我是否做错了什么。
客户端和服务器都在没有用于其他任何事情的无线网络上运行。我尝试以越来越慢的速度发送数据包,但没有任何区别。
客户端: Ubuntu 11.10 64 位
服务器: Ubuntu 12.04 64 位
编辑:在上面的示例中,我已替换QHostAddress::Broadcast
为QHostAddress("x.x.x.x")
(x.x.x.x
服务器的 IP 地址在哪里),并且没有任何数据包被丢弃。所以看起来问题仅限于广播数据包。
进一步编辑:将客户端切换到 Windows 7 只会导致 9% 的数据包丢失(91% 的数据包到达)。