1

各着信要求を個別のスレッドで処理する UDP サーバーを構築しています。問題は、UDP クライアントが複数のスレッドを使用して複数の要求を同時に送信する可能性があることです。クライアント上の各スレッドは、サーバーからの応答を待ちます。UDP はコネクションレスであるため、クライアント スレッドは一致しないデータグラムを受信する場合があります。この場合、クライアント スレッドが一致する応答を取得するのに役立つ組み込みのメカニズムまたはパターンはありますか? (たとえば、サーバーから特定のudpポートに各リクエストを送信します!!?)同時にプロパティが失われたため、キューを使用したくありません。そうでない場合は、適切なクライアント スレッドに応答をディスパッチするキューを構築できると思います。しかし、同じクライアント マシン上の異なる JVM で複数のクライアントを実行する必要があり、各クライアントが同じサーバーに対して要求を行う場合はどうすればよいでしょうか?

4

2 に答える 2

2

UDP クライアントごとに個別のソケットを使用します。そうすれば、送信用に別のIPとポートがあり、同じで応答を受信します。つまり、要求を送信したクライアントは、その応答のみを受信します(マッチングの意味はそれだと思います)スレッド間で同じソケットを使用し、それを使用してサーバーにメッセージを送信するのは悪い考えのようです。

メッセージをサーバーに送信する前に、クライアントのソース (送信者ポート) に任意のポートを設定できます。サーバーは送信元ポートを抽出し、同じポートに応答できます

例えば

Client 1 source port:10401 -> server:listening port:2000.  Server responds to port 10401. 

Client 2 source port:10402 -> server: listening port: 2000. Server responds to port 10402.
于 2012-09-28T17:18:47.110 に答える
1

同時接続を行う場合は、複数の接続を行います。クライアントに新しいUDP接続を生成すると、サーバーはその端で新しい接続を開くだけです。クライアントのconnection1で送信されたものはすべて、サーバーのconnection1で受信され、connection2で送信されたものはすべて接続2で受信されます。

于 2012-09-28T17:41:36.367 に答える