我正在编写一个程序,它将一个小的 UDP 数据包(大约 100 字节)发送到很多目的地(包括一些真实的目的地,而所有其他目的地都是伪造的目的地)。
如果我发送到少数目的地,真正的目的地可以收到数据包。
如果我在每次发送之间没有休眠的情况下发送到大量目的地,那么只能接收到一些真实的目的地,或者它们都无法接收到数据包。
如果我发送到大量目的地,并且每次发送之间都处于正确的睡眠状态,那么只有一些真实的目的地可以接收到,或者它们都不能接收到数据包。
这是示例代码:
void send()
{
//about 10K addresses
QList<QHostAddress> addrs; //include some real destinations and all others are fake destinations
quint16 port;
QString data("Data: about 100 bytes");
QUdpSocket udp;
for(QHostAddress add : addrs)
{
udp.writeDatagram(data.data(), add, port);
//QThread::msleep(1); // 1 milisecond or 10, 100, ...
}
}
有人知道这个问题吗?它从何而来?我该如何解决?
使用我的解决方法(添加睡眠),我如何计算正确的毫秒数?