Я написал простую программу, в которой сервер должен печатать данные, отправленные несколькими клиентами.Но сервер получает только частичные данные.Ниже приведены соответствующие части кода.
Сервер:
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
Я не получаю второе и третье сообщения.Сервер продолжает ждать.Куда я иду не так?
Редактировать: В коде сервера я попытался удалить reader.close()
и clientSocket.close()
.Это тоже не сработало.Другой вопрос - если 3 клиента отправляют 3 сообщения, требуется ли 9 подключений?(по этой причине я закрыл соединение в коде сервера)