UDP数据包安排

时间:2012-08-08 05:21:26

标签: c++ udp boost-asio p2p packets

我使用Boost C ++实现了一个P2P应用程序。因为你没有UDP不保证数据包顺序甚至数据包传递,所以我想到了:

将一个请求的所有收到的UDP数据包放入链接列表中并正确排序,以便能够以健壮的方式识别序列和丢失的数据包。链接列表使用struct。 或
我想把它放在一个向量中,并在一个单独的线程中将数据包安排在向量中。

哪一个是最好的方法?或者除了窗口滑动之外你还有其他最好的方法吗?

2 个答案:

答案 0 :(得分:5)

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

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

或者你可以使用std::priority_queue和你自己的比较函数来检查序列号。

您还应该查看UPnP NAT traversal

答案 1 :(得分:0)

为了确保正确的顺序并检测丢失的数据包或重复数据,您必须使用序列号或类似的方法。当您将数据包放入发送方的链表时,如何在接收方检查正确的顺序?有关检测丢失和无序数据包的示例解决方案,请参阅TCP协议(尽管如此,它还有更多功能)。

通常在丢包或重新排序时可以使用UDP。如果你想确保这两个属性甚至是UDP,你必须自己做一些工作。