-1

しばらく前にこれに遭遇しましたが、最近話し合ったところ、解決方法がわからないことがわかりました...
サーバーとクライアントがUDPを介して通信しているとします。
クライアントはUDPポートXでリッスンし、サーバーパケットを受信します。
次に、サードパーティのプロセスが開始され、UDPポートXでもリッスンします。
これで、クライアントが受信する予定のパケットを読み取り、キューから削除する可能性があり、クライアントはそれらをまったく受信しません。

さらに悪いことに、クライアントがUDPメッセージをサーバーに送信して、接続するTCPポートをサーバーに割り当てる場合。サーバーは、使用中であっても、クライアントが認識している一定のUDPポートXに接続する必要があります。そうしないと、サーバーに接続できなくなります。

どうすればそれを防ぐことができますか?

4

2 に答える 2

2

ポートを共有したいすべてのプロセスは、SO_REUSEADDR を設定する必要があります。そうでない場合、最初にポートにバインドしたものがそれを取得し、他のものは失敗します。したがって、(a) SO_REUSEADDR を設定せず、(b) 最初にポートにバインドします。最初でない場合は、バインド エラーが発生します。

于 2012-09-15T13:58:36.640 に答える
1

ユニキャストUDPパケットのみを「盗む」ことができます。実際に発生するのは、IPスタックが最初にバインドされたアプリケーションにのみ配信されることです。

解決策は管理です。必要なポートにバインドするために実行される最初のアプリケーションになります。

于 2012-09-14T15:00:43.500 に答える