サーバーが複数のクライアントから送信されたデータを印刷する簡単なプログラムを作成しました。ただし、サーバーは部分的なデータしか受信しません。以下は、コードの関連部分です。
サーバ:
try {
serverSocket = new ServerSocket(8888);
} catch (IOException e) {
System.err.println("Could not listen on port: 8888");
System.exit(-1);
}
while (listening) {
Socket clientSocket = serverSocket.accept();
BufferedReader reader = new BufferedReader(new InputStreamReader(
clientSocket.getInputStream()));
System.out.println(reader.readLine());
reader.close();
clientSocket.close();
}
serverSocket.close();
クライアント:
try {
socket = new Socket("nimbus", 8888);
writer = new PrintWriter(socket.getOutputStream(), true);
localHost = InetAddress.getLocalHost();
}
catch (UnknownHostException e) {}
catch (IOException e) {}
StringBuilder msg1 = new StringBuilder("A: ");
for(int i=1; i<=3; i++)
msg1.append(i).append(' ');
writer.println(localHost.getHostName() + " - " + msg1);
StringBuilder msg2 = new StringBuilder("B: ");
for(int i=4; i<=6; i++)
msg2.append(i).append(' ');
writer.println(localHost.getHostName() + " - " + msg2);
StringBuilder msg3 = new StringBuilder("C: ");
for(int i=7; i<=9; i++)
msg3.append(i).append(' ');
writer.println(localHost.getHostName() + " - " + msg3);
writer.close();
socket.close();
次の出力が得られます(3つのクライアントで実行した場合)
nimbus2 - A: 1 2 3
nimbus3 - A: 1 2 3
nimbus4 - A: 1 2 3
2番目と3番目のメッセージが表示されません。サーバーは待機し続けます。どこが間違っているのですか?
編集:サーバーコードで、とを削除reader.close()
してみclientSocket.close()
ました。それもうまくいきませんでした。別の質問-3つのクライアントが3つのメッセージを送信する場合、9つの接続が必要ですか?(これが理由です、私はサーバーコードで接続を閉じました)