我写了一个简单的程序,服务器应该打印多个客户端发送的数据。但服务器只接收部分数据。以下是代码的相关部分。服务器不接收来自多个客户端(java套接字)的数据
服务器:
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个连接? (这是原因,我关闭了服务器代码中的连接)
谢谢。看着你的代码,我意识到我的服务器代码的问题是缺少循环(用于读取数据)。它添加循环后工作正常(和我使用BufferedReader) – Raghava 2012-01-08 18:30:17
我很高兴我可以帮助。如果您只是使用循环,则您的服务器一次只能处理来自一个客户端的输入。如果第二个客户端在第一个客户端仍在发送数据时连接,则第二个客户端将被迫等待并可能超时。 – patheros 2012-01-08 19:52:51
好的,谢谢你的投入:)。我会按照你的建议使用线程。 – Raghava 2012-01-08 19:54:33