我有一个UdpClient坐在一个端口上。我用它来发送数据。
99%的时间我不关心任何传入的数据包。但是,在极少数情况下,我需要收听我发送的一个数据包的响应。
我的第一个想法是在发送之后直接调用UdpClient.Recieve(),并循环遍历任何数据包,直到找到我的回复。
但是,我想知道接收缓冲区如何在UdpClient中工作。由于我没有正常处理任何收到的数据包,我认为它必须缓冲它们然后在缓冲区达到一定大小时将它们丢弃。我担心这个丢弃可能发生在我的回复到达电汇后,但在我的Recieve()呼叫执行之前。
我能想到的唯一解决方案就是不断地异步处理所有收到的数据包,但这对于这么简单的情况来说似乎有点过头了。
有谁知道UdpClient的缓冲行为? (例如,它会丢弃整个缓冲区,还是只丢弃最旧的数据或什么?)。 MSDN没有提供我能找到的详细信息。
答案 0 :(得分:1)
网络驱动程序将使用不同大小的环形缓冲区。
Ring Buffer: [Slot 1] [ Slot 2] [Slot 3]
Incoming Data: AAAA BBBB CCCC DDDD EEEE FFFF
Ring Buffer: [DDDD] [EEEE] [FFFF]
确切的大小通常取决于驾驶员,但这与您的问题无关。
当您实际等待响应时,您应该只做一个RECV处理循环。