マルチキャスト ソケットを使用した単純な 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 /秒
すべて問題ないようです