UdpClient接收缓冲区。什么时候丢包?

时间:2012-01-09 13:27:12

标签: buffer udpclient

我有一个UdpClient坐在一个端口上。我用它来发送数据。

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

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

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

我能想到的唯一解决方案就是不断地异步处理所有收到的数据包,但这对于这么简单的情况来说似乎有点过头了。

有谁知道UdpClient的缓冲行为? (例如,它会丢弃整个缓冲区,还是只丢弃最旧的数据或什么?)。 MSDN没有提供我能找到的详细信息。

1 个答案:

答案 0 :(得分:1)

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

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

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

确切的大小通常取决于驾驶员,但这与您的问题无关。

当您实际等待响应时,您应该只做一个RECV处理循环。