0

指定されたポートで接続をリッスンしBlockingLinkedQueue、コンシューマー スレッドがメッセージを読み取るソケットを配置するサーバーを作成したいと考えています。この方法で着信接続を受け入れます。

   ServerSocket serverSocket = new ServerSocket(port);
   while (true)
   {
        Socket socket = null;
        socket = serverSocket.accept();
        queue.put(socket);
   }

2 つの別々のホストから並列に接続しようとすると、最初のホストへの応答が 2 番目の接続の確立後に 2 番目のホストに送信されることがあります。コードを以下のリストに変更すると、2 番目の接続は単に拒否されます。

   while (true)
   {
        ServerSocket serverSocket = new ServerSocket(port);
        Socket socket = serverSocket.accept();
        queue.put(socket);
   }

私の質問は次のとおりです。

  1. この 2 つの状況の違いは何ですか? 最初の状況でメッセージが 2 番目のホストに送信されるのはなぜですか?
  2. サーバーと両方のホストの間に個別の接続を作成し、それらを並行して処理するには、コードをどのようにリファクタリングする必要がありますか?
4

1 に答える 1

5

この 2 つの状況の違いは何ですか?

最初のケースでは、複数の接続に同じポートを使用しています。2 番目のケースでは、サーバー ポートを破棄しているため、待機中の接続はすべて拒否されます。

最初の状況でメッセージが 2 番目のホストに送信されるのはなぜですか?

コードのバグのため、ここには示されていません。

サーバーと両方のホストの間に個別の接続を作成し、それらを並行して処理するには、コードをどのようにリファクタリングする必要がありますか?

接続ごとにスレッドを作成します。

于 2012-06-26T18:03:26.953 に答える