所以我的客户看起来像这样:
Socket socket = new Socket("localhost", 1234);
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in));
while (true) {
String userInput = stdIn.readLine();
if (userInput != null) {
String message = username + ":" + userInput + "\n";
out.println(message);
out.flush();
}
String serverMessage = in.readLine();
if (serverMessage != null){
System.out.println(serverMessage);
}
}
客户端必须侦听用户输入以将其传输到其他客户端,并且必须侦听其他客户端消息。这段代码正是如此,但却停留在第一行,用于监听用户输入。有没有解决方法?
答案 0 :(得分:1)
它被卡住的原因是它等待读取从另一端发送给它的一行。什么都没有,所以它被卡住了。
如果没有数据即可被卡住,您可以设置套接字超时。请注意,套接字仍然有效。这是:
socket.setSoTimeout(200); // Add this below the socket creation line. Timeout of 200 ms.
和
try {
String serverMessage = in.readLine(); // it will timeout in 200 ms
if (serverMessage != null) {
System.out.println(serverMessage);
}
} catch (SocketTimeoutException e)
// log
}
请将超时更新为所需的任何内容,但要确保它不会太少,因为它会像疯了一样循环。希望这会有所帮助。