2012-01-09 33 views
1

我有一个UdpClient坐在一个端口上。我用它来发送数据。UdpClient接收缓冲区。它什么时候丢包?

99%的时间我不在乎任何传入的数据包。但是,在极少数情况下,我需要侦听来自我发送的一个数据包的响应。

我的第一个想法是在发送之后直接简单调用UdpClient.Recieve(),并循环查看任何数据包,直到找到我的答复。

但是,我想知道接收缓冲区如何在UdpClient中工作。由于我没有正常处理任何收到的数据包,因此我认为它必须缓冲它们,然后在缓冲区达到一定大小时将它们丢弃。我担心在我的回复到达电汇后,但在我的Recieve()调用执行之前,这种抛出可能会发生。

我能想到的唯一解决方案是不断处理所有接收到的数据包,但这对于这样一种简单的情况似乎有点矫枉过正。

有谁知道UdpClient的缓冲行为? (例如,它是否扔掉了整个缓冲区,或只是最老的数据或什么?)。 MSDN没有提供我可以找到的详细信息。

回答

1

网络驱动程序将使用不同大小的环形缓冲区。

Ring Buffer: [Slot 1] [ Slot 2] [Slot 3] 
Incoming Data: AAAA BBBB CCCC DDDD EEEE FFFF 

Ring Buffer: [DDDD] [EEEE] [FFFF] 

确切的大小通常取决于驱动程序,但这与您的问题无关。

当你真的在等待响应时,你应该没问题只做一个RECV处理循环。

相关问题