UDP数据包排列

问题描述 投票:2回答:2

我已经使用Boost C ++实现了P2P应用程序。如您所知,UDP不能保证数据包的顺序甚至是数据包的传递,所以这就是我的想法:

将所有接收到的UDP数据包放在一个链接列表中,并对其进行正确排序,以便可以以可靠的方式识别序列和丢失的数据包。链接列表是使用struct创建的。

-或-

我想过将其放在向量中,并将向量中的数据包安排在单独的线程中。

哪个是最好的方法?还是除了滑动窗口之外,还有其他最佳方法吗?

c++ udp boost-asio p2p packet
2个回答
6
投票

而不是实现自己的容器或排序,为什么不使用标准库中已有的内容?

例如,您可以将std::map与序列号作为键使用。它是按键自动排序的。

或者您可以将std::map与您自己的用于检查序列号的比较功能一起使用。

您还应该查看std::priority_queue


0
投票

为了确保正确的顺序并检测丢失的数据包或重复项,您必须使用序列号或类似的方法。将数据包放在发送方的链表中时,如何在接收方检查正确的顺序?请参阅TCP协议,以获取有关检测丢失和乱序数据包的示例解决方案的信息(不过,它做得更多)。

通常,当可接受丢包或重新排序时,使用UDP。如果即使对于UDP也要确保这两个属性,则必须自己做一些工作。

© www.soinside.com 2019 - 2024. All rights reserved.