我正在编写一个由两个不同程序组成的应用程序。一个(客户端)发送UDP广播数据包,另一个(服务器)记录收到的任何数据包。
应用程序是用Qt编写的 - 我基本上使用UDP Multicast example并将其用于服务器。客户端看起来像这样:
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%的数据包到达)。