c++ - Boost.ASIO UDP 套接字 : sink all the packets

标签 c++ boost udp buffer boost-asio

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

代码工作正常,唯一的问题是在我处理数据包时,更多的数据会创建一个队列(缓冲区)来处理。不过,我的程序必须接收自处理开始以来收到的所有数据包,以便它只监听最近的数据包。

例子:

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

有什么办法可以把中间的包丢掉吗? 谢谢!

最佳答案

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

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

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

  4. 转到第 2 步。

请注意,UDP 是数据报协议(protocol),而不是数据包协议(protocol)。单个 UDP 数据报可以拆分为多个数据包。

关于c++ - Boost.ASIO UDP 套接字 : sink all the packets,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32362454/

相关文章:

java - udp 服务器上的 java 地址已在使用错误

c++ - "int duplicate = num"是如何用于此代码段的?

Android NDK 相机示例 JPEG(30 Hz)

c++ - 快速舍入定点数

c++ boost::filesystem undefined reference to `boost::filesystem3::path::root_name() const'

sockets - 计算两台主机之间的网络距离

C++ 为什么我的代码将注册表项放在错误的目录中?

c++ - 如何将主机名转换为 boost 地址或端点?

c++ - 理解 Boost.Spirit 中的列表运算符(%)

java - Java 中可靠的 UDP 协议(protocol)实现——为什么会这样?