【发布时间】:2015-11-28 12:15:23
【问题描述】:
我正在使用 boost::asio::ip::udp::socket 通过 socket 的 async_receive_from 方法接收 UDP 数据包。
代码运行良好,唯一的问题是在我处理一个数据包时,会创建一个队列(缓冲区)来处理更多。但我的程序必须接收自处理开始以来收到的所有数据包,以便它只侦听最近的数据包。
例子:
- 数据包 1 已发送
- 数据包 1 正在处理中
- 数据包 2、3、4 已发送
- 数据包 1 结束计算
- 刷新缓冲区
- 数据包 5 已发送
- 数据包 5 正在处理中
- 等
有什么方法可以丢弃中间的数据包吗? 谢谢!
【问题讨论】:
-
您必须在处理数据包之前存储和订购数据包。例如,您可以将它们添加到列表中,然后从后面处理此列表。
-
感谢 user743414。我目前是通过缓冲区来做的。我不想处理“旧”数据包,我只想处理尽可能多的数据包,丢弃中间的数据包。
-
定义“旧”数据包?您使用的是时间戳还是简单的向上计数 id?当您只想处理最后一个数据包时,您只需存储最后收到的数据包。
-
不,没什么,它们只是覆盖自己的命令。我只需要处理最后一个,否则我会造成延迟。我不需要在中间处理数据包。而且我无法指定缓冲区的最小大小,因为数据包的大小不同
-
数据包1的处理是在发送端还是在接收端?
标签: c++ boost udp buffer boost-asio