好的,我知道UDP并不保证交付,但是我希望通过让RecvFrom处于一个具有TimeCritical优先级的线程中,并且快速地将传入的消息移动到一个缓冲区中来捕获所有的消息。但是,当消息速率达到每秒钟1000,1500字节时,就会错过一些消息。我已经用WireShark验证了这些消息实际上是由计算机接收的。
我非常肯定,消息在极短的时间内从RecvFrom返回,直到它再次被调用。
有什么办法“抓住一切”,因为信息显然是收到的?
谢谢。
发布于 2019-12-08 04:54:33
是否有任何方法“捕获所有”,因为消息显然是收到的?
不是的。如果从套接字缓冲区读取消息的速度不够快,并且这个接收缓冲区被填满,那么消息就会被丢弃。如果它们是在计算机上接收到的,并且在Wireshark中是可见的,那么重要的是它们是否会在套接字接收缓冲区中结束。
您可能会尝试增加此缓冲区以减少损失的可能性,但仍有可能发生这种情况。交付的不可靠性是您与UDP之间的权衡之一,没有魔法可以解决它。要么您可以处理数据包丢失,要么您必须跟踪丢失,并以某种方式请求再次发送消息。
https://stackoverflow.com/questions/59232085
复制相似问题