我正在使用 boost::asio::ip::udp::socket 通过套接字的 async_receive_from 方法接收 UDP 数据包。
代码工作正常,唯一的问题是在我处理数据包时,更多的数据会创建一个队列(缓冲区)来处理。不过,我的程序必须接收自处理开始以来收到的所有数据包,以便它只监听最近的数据包。
例子:
- 数据包 1 已发送
- 正在处理数据包 1
- 数据包 2、3、4 已发送
- 数据包1结束计算
- 刷新缓冲区
- 数据包 5 已发送
- 正在处理数据包 5
- 等等
有什么办法可以把中间的包丢掉吗? 谢谢!
最佳答案
使用仅包含单个数据报的缓冲区。
继续读入缓冲区,直到没有更多的数据报可读。
如果您至少读取了一个数据包,则处理缓冲区中的数据报。
转到第 2 步。
请注意,UDP 是数据报协议(protocol),而不是数据包协议(protocol)。单个 UDP 数据报可以拆分为多个数据包。
关于c++ - Boost.ASIO UDP 套接字 : sink all the packets,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32362454/