udp数据包丢失和恢复

| 我正在为文件和实时视频流应用程序同时开发基于udp / tcp的P2P。该应用程序将使用c ++为Linux和Windows平台开发。 我们正在使用ICE(TCP / UDP穿孔)来实现P2P。 虽然TCP确保数据包丢失,但是对于UDP,我需要一种体面的方法来确保必须将数据包传递到另一个对等方。 我想知道执行此操作的算法或技术。 是否有任何免费的第三方工具/库可做。 任何链接和建议将不胜感激?
已邀请:
您可能会发现该问题的答案很有帮助:当您需要可靠的UDP时使用什么?

bab

您需要涵盖4个主要问题: 数据切片-UDP数据报不能包含无限量的信息。因此,您(通常)需要将信息切成多个数据报,然后在另一端重新连接拼图。对于给定的“切片”,您需要唯一的标识符和拼图编号。 永无止境-UDP数据报有时会在网上丢失。如果目标对等方未收到预期的数据报,则应有一种机制让其再次请求它。另一种方法是在接收时发送确认。 重播-有时,您可能会两次收到相同的UDP数据报(出于复杂的原因)。目标对等方应检测到这一点。 乱序-发送顺序并不总是接收顺序。目标对等方需要处理这种情况。 您可以实现一个称为切片窗口的协议。我认为您不会为此找到一个第三方库(尽管有人可能在这里证明我错了),因为上述所有内容通常都是由TCP本身实现的。
一种简单的方法是为每个数据包都有一个监视线程-
public void run() {
    int transmissions = 0;
    do {
        sendPacket();
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {}
    } while (!acknowledged() && ++transmissions < MAX_TRANSMISSIONS);
}
如果性能很重要,则可以使用一个线程来监视消息队列。

要回复问题请先登录注册