2

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

将一个请求的所有接收到的 UDP 数据包放入链接列表中并正确排序,以便可以以稳健的方式识别序列和丢失的数据包。链接列表是使用 struct 制作的。

-或者-

我想把它放在一个向量中,并将向量中的数据包安排在一个单独的线程中。

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

4

2 回答 2

6

与其实现自己的容器或排序,不如使用标准库中已有的东西?

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

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

您还应该查看UPnP NAT 遍历

于 2012-08-08T06:31:04.477 回答
0

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

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

于 2012-08-08T05:40:38.923 回答