私は少しのインスタントメッセージングアプリケーションのためのサーバークラスを作成しています。サーバーを単一のクライアントに接続しようとするとすべてが機能していますが、複数のクライアントに接続するように拡張しようとしています。私はテストして、複数のクライアントに接続することができますが、問題は、同時にすべての入力を読み取ることができないという事実にあります。一度に複数のクライアントから入力を読み取る方法は?
入力を常に確認するためにクライアントごとに新しいスレッドを開く必要がありますか?私はこれが非常に非効率的だと感じます。
これは、クライアントからの入力をチェックするコードで、現在はArraylistに格納されています。私はスキャナに似ていると信じていますが、入力があるまでコードを続行しません。
private void chat() throws IOException{
String message = " You are now connected! ";
sendMessage(message);
ableToType(true);
do{
try{
//right now it is only checking the first (0) client
message = (String) inputs.get(0).readObject(); // this is the line that checks for inputs
showMessage("\n" + message, new java.awt.Color(20, 124, 34));
}catch(ClassNotFoundException classNotFoundException){
showMessage("\nUnreadable Message Sent by Client");
}
}while(!message.contains("END"));
}
この単純な例を使用している場合、java.nioパッケージをチェックして、1つのスレッドまたはほんの数のスレッドで多くの接続を処理する方法を調べることもできます。 –