1

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

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

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

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

我能想到的唯一解决方案是持续异步处理所有接收到的数据包,但对于这种简单的情况,这似乎有点过分了。

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

4

1 回答 1

1

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

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

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

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

当您实际等待响应时,您应该只执行 RECV 处理循环。

于 2012-01-09T13:52:43.577 回答