私はこれをしばらく試してきました。複数のクライアントが同時に複数の入力を受け取るようにしたいと思います。
1つの問題があります。クライアントが「print2allこんにちは」と言うと、サーバがすべてのクライアントに「こんにちは」を印刷するようにします。
私はそれを印刷するためにそれを処理する方法を知っています、ただすべてのクライアントに印刷することが問題です。ソケットを使ってJavaサーバーを作成しました。すべてのソケットに印刷するにはどうすればいいですか?
これまで私がこれまで持っていたことは次のとおりです。
サーバー
try{
try{
server = new ServerSocket(25565);
} catch (Exception e){
e.printStackTrace();
}
while (isListening){
new SocketThread(server.accept()).start();
}
server.close();
} catch (Exception e){
e.printStackTrace();
}
SocketThread
try {
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String inputLine, outputLine;
Processor kkp = new Processor();
out.println("Hi!");
while ((inputLine = in.readLine()) != null) {
outputLine = kkp.Proccess(inputLine,this.socket);
out.println(outputLine);
}
out.close();
in.close();
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
クライアント
Processor p = new Processor(); socket = new Socket("localhost",25565); out = new PrintWriter(socket.getOutputStream(), true); in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in));
String fromServer;
String fromUser;
out.println("print2all Hi")
socket.close();
男。あなたはスターター・サーバとしてこれを使用したい場合は、私は完全なアクセス許可= P
1つの放送。 –
@ChristopheBiocca:あなたは正しいですが、OPにははるかに単純な問題があるようです。しかし、私はスレッドの安全性について言及します、ありがとう! –
+1並行性ライブラリのコレクションを使用する場合は、スレッドを追加して最後にソケットを削除して、リストを維持することができます。接続のハンドラを追加したり削除したりすると、接続の状態をよく取得できるので便利です。 –