我在 Windows XP 上使用 QUdpSocket 来发送一些数据。每 10 秒,我发送大约 100 到 500 个数据包,每个数据包大约 50 个字节。我对主机每次发送少量数据包没有任何问题。主机每 10 秒发送 500 个或更多数据包时出现问题。
使用 writeDatagram(...) 时,我收到错误消息“无法发送数据”。500 个数据包中的大多数都已发送(用wireshark 检查),但有些根本没有发送(最后一个)。
我认为当套接字的写缓冲区已满时会出现问题。但我不知道如何使用 Qt 来检查这一点,以等待缓冲区准备好写入更多数据。
如果没有 Qt,我可以使用 select(...) 方法来检查套接字是否准备好并一次发送 1 个字节。但是我怎么能用 QUdpSocket 来检查呢。没有这样的方法。此外, bytesToWrite() 似乎总是返回零。
我知道我可以睡觉并重试,但我认为这种方法不可靠。该方法可能因其他原因而失败。操作系统对此有一个很好的方法,称为 select()。
谢谢您的帮助。