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