0

スレッド プールを使用して Java チャット サーバーを開発しようとしていますが、クライアントからの受信メッセージを処理する方法がわかりません。すべてのソケット接続をハッシュマップに保存し、タスクをスレッドプールのキューに追加することを考えました..しかし、サーバーは、バッファーリーダーをインスタンス化せずに、クライアントからメッセージを受信して​​いることをどのように知ることができますか?

4

2 に答える 2

0

サーバーは、ソケットから読み取る BufferedReader を保持するエージェント オブジェクトを使用する必要があります。おそらく、これらのエージェント オブジェクトのコレクションを作成する必要があります。

例えば、

class ServerAgent implements Runnable {
   private OutputStream out;
   private BufferedReader br;

   public ServerAgent(Socket clientSocket) throws IOException {
      out = clientSocket.getOutputStream();
      br = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));

      // ....
   }


   @Override
   public void run() {
      // TODO finish code that reads from br, BufferedReader

   }
}

サーバーには次のようなコードを含めることができます。

while (true) {
   Socket clientSocket = server.accept();
   futureList.add(threadPoolExector.submit(new ServerAgent(clientSocket)));
}
于 2013-09-15T19:18:55.963 に答える