Boost.ASIO UDP套接字:接收所有数据包

时间:2015-09-02 20:24:20

标签: c++ boost udp buffer boost-asio

我使用boost :: asio :: ip :: udp :: socket通过socket的async_receive_from方法接收UDP数据包。

代码工作正常,唯一的问题是,在我处理数据包的时候,还有更多来创建一个队列(缓冲区)来处理。我的程序虽然必须接收自处理开始以来收到的所有数据包,但它只能侦听最新的数据包。

示例:

  • 发送包1
  • 正在处理数据包1
  • 发送包2,3,4;
  • 数据包1结束计算
  • 刷新缓冲区
  • 发送包5
  • 正在处理数据包

有没有办法丢弃中间的数据包? 谢谢!

2 个答案:

答案 0 :(得分:1)

  1. 使用仅包含单个数据报的缓冲区。

  2. 继续读入缓冲区,直到没有更多的数据报可供阅读。

  3. 如果您至少读取了一个数据包,请在缓冲区中处理数据报。

  4. 转到第2步。

  5. 请注意,UDP是数据报协议,而不是数据包协议。单个UDP数据报可以分成多个数据包。

答案 1 :(得分:0)

我认为这可以很简单:

  1. async_receive_from直到收到包裹。
  2. 检查available方法以确定套接字中是否有更多数据。
  3. 如果我们有更多数据,请丢弃缓冲区并转到1;别处理包