5

UDP サーバー/クライアント アプリケーションについて書いています。

1 つのサーバーで一度に 40 のクライアントを処理したいと考えています。このために、それぞれが 1 つのクライアント専用の 40 個の専用スレッドを作成したいと考えています。クライアントごとに 40 個のスレッドがあるため、40 個の専用ソケットも作成したいと考えています。

しかし、問題は次のとおりです。

ソケットを bind() する 40 個の IP アドレスがどうなるかわかりません。(今のところ、サーバーの IP アドレスに bind() する必要があります。) 通常、"INADDR_ANY"ソケットが 1 つしかない場合に bind() します。

しかし、40 個のソケットのそれぞれを bind() する必要がある IP アドレスは何でしょうか? 私を助けてください。コメント/ヘルプをいただければ幸いです。

4

4 に答える 4

1

専用のリッスン スレッドで単一のリッスン ソケットを作成します。

新しいパケットを受信すると、パケットのリモート アドレス/ポートを使用するか、パケット ペイロードに一意の clientID を入れて、クライアントを一意に識別します。

そのクライアント用の新しいスレッドが存在しない場合は作成し、パケットをそのスレッドに渡してさらに処理し、リッスンに戻ります。

特定のクライアント スレッドがしばらくパケットを受信しない場合、それ自体が終了する可能性があります。

于 2013-04-12T22:22:03.427 に答える
1

通常の方法は、単一のソケットをバインドし、着信接続を受け入れることです。各接続には、accept によって一意のソケットが割り当てられます。

UDP を使用しているので、上記のように TCP を使用して、クライアントにそれぞれのサーバー UDP アドレスを知らせます。

于 2013-04-12T10:45:14.617 に答える