1

好的,我知道 UDP 不能保证传递,但我希望通过将 RecvFrom 放在具有 TimeCritical 优先级的线程中并快速将传入消息移动到缓冲区中来捕获所有内容。但是,当消息的速率达到每秒大约 1000 1500 字节消息时,会丢失一些消息。我已经用 WireShark 验证了这些消息实际上是由计算机接收的。

我很确定从 RecvFrom 返回到再次调用它之前,消息在极短的时间内丢失了。

有什么办法可以“抓住所有”,因为显然收到了消息?

谢谢。

4

1 回答 1

2

有什么办法可以“抓住所有”,因为显然收到了消息?

不会。如果您从套接字缓冲区读取消息的速度不够快,并且此接收缓冲区已填满,则消息只会被丢弃。它们是否在计算机上被接收并且在 Wireshark 中可见并不重要,重要的是它们是否最终在套接字接收缓冲区中。

您可能会尝试增加此缓冲区以降低损失的可能性,但它仍然可能发生。交付的不可靠性是您使用 UDP 的权衡之一,并且没有任何魔法可以解决它。您可以应对数据包丢失,或者您必须跟踪丢失并以某种方式请求再次发送消息。

于 2019-12-08T04:54:33.897 回答