【问题标题】:UdpClient receive buffer. When does it drop packets?UdpClient 接收缓冲区。它什么时候丢包?
【发布时间】:2012-01-09 13:27:11
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

    标签: buffer udpclient


    【解决方案1】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2020-03-31
      • 2018-07-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-09
      • 2011-05-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多