4

マルチキャスト ソケットを使用した単純な udp サーバー クライアント アプリケーションを作成しました。サーバーは 6 ms ごとに 3 つのクライアントにパケットを送信しています。パケット サイズは 1200 バイトです。これは 1 秒あたり 166,66 パケットです。クライアントの 1 つがパケットの欠落を検出すると、ユニキャスト経由で NACK パケットをサーバーに送信します。

最初のテスト: サーバーと 3 つのクライアントがイーサネット経由でルーター TP-Link TL-WDR4300 (dd-wrt) に接続され、すべてが正常に機能しました。

2 番目のテスト: サーバーのみがイーサネット経由でルーターに接続され、他のクライアントはワイヤレス 2.4 GHz および固定チャネル経由で接続されました。ワイヤレスでは 2 つの問題が発生しました。最初の問題はパケット損失です。クライアントはパケットの 50% しか受信していません。そして、損失はバーストで表示されます。たとえば、400 パケットが受信され、200 パケットが失われます。2 番目の問題は、クライアントが NACK パケットをサーバーに送り返しているときに、wireshark で確認できますが、アプリケーションがそれらを受信できないことです。クライアントがイーサネット経由で接続されていたときとコードが同じであるため、これは奇妙です。それで、何かアイデアはありますか?ありがたく思います

サーバーコード:

while (1) {

    FD_ZERO(&readfds);
    FD_SET(sd, &readfds);

    tv.tv_sec = 0;
    tv.tv_usec = 0;

    rv = select(sd + 1, &readfds, NULL, NULL, &tv);

    while (rv == 1) {

        nack_processing(sd);
        rv = select(sd + 1, &readfds, NULL, NULL, &tv);


    }
}
return 0;

}

トラフィックを減らすための更新も行いました: パケット サイズ: 800 バイト パケット間の到着時間: 10 ミリ秒 = 100 パケット/秒 = 0.076 MB/秒

サーバー側とクライアント側でトラフィックを測定しました: サーバー ~ 10 MB/秒 クライアント ~ 5 MB /秒

すべて問題ないようです

4

1 に答える 1