1

私はファイル用のudp/tcpベースのP2Pとリアルタイムビデオストリーミングアプリケーションの両方に取り組んでいます。このアプリケーションは、c++を使用してLinuxとWindowsの両方のプラットフォーム用に開発されます。

P2Pの実装にはICE(TCP / UDPホールパンチング)を使用しています。TCPはパケット損失を保証しますが、UDPの場合は、パケットを他のピアに確実に配信するための適切なアプローチが必要です。

  1. これを行うためのアルゴリズムまたは手法を知りたかったのです。
  2. 無料のソードパーティーツール/ライブラリはありますか?

リンクや提案をいただければ幸いです。

4

3 に答える 3

5

4 つの主な問題をカバーする必要があります。

  1. データ スライス- UDP データグラムに無限の情報を含めることはできません。したがって、(多くの場合) 情報を複数のデータグラムにスライスし、反対側でパズルのピースを再接続する必要があります。特定の「スライス」には、一意の識別子とパズルのピース番号が必要です。
  2. Never Reached - UDP データグラムがネット上で失われることがあります。ターゲット ピアが予期されたデータグラムを受信しない場合、再度要求できるメカニズムが必要です。別の方法は、受信時に確認を送信することです。
  3. リプレイ- 同じ UDP データグラムを 2 回受信することがあります (複雑な理由により)。ターゲット ピアはこれを検出する必要があります。
  4. 順不同- 送信の順序が常に受信の順序とは限りません。ターゲット ピアは、この状況を処理する必要があります。

実装できるスライスウィンドウと呼ばれるプロトコルがあります。上記のすべては通常 TCP 自体によって実装されているため、このためのサードパーティのライブラリが見つかるとは思いません (誰かがここで私が間違っていることを証明するかもしれません)。

于 2011-04-19T11:03:33.063 に答える
0

この質問への回答が役立つ場合があります。信頼できるUDPが必要な場合は何を使用しますか?

于 2011-04-19T12:27:25.027 に答える
-1

簡単なアプローチは、パケットごとに監視スレッドを用意することです -

public void run() {
    int transmissions = 0;
    do {
        sendPacket();
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {}
    } while (!acknowledged() && ++transmissions < MAX_TRANSMISSIONS);
}

パフォーマンスが重要な場合は、単一のスレッドを使用してメッセージのキューを監視できます。

于 2011-04-19T08:50:29.340 に答える