套接字客户端卡在用户输入上

时间:2014-12-04 06:01:30

标签: java multithreading sockets

所以我的客户看起来像这样:

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);
    }
}

客户端必须侦听用户输入以将其传输到其他客户端,并且必须侦听其他客户端消息。这段代码正是如此,但却停留在第一行,用于监听用户输入。有没有解决方法?

1 个答案:

答案 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
}

请将超时更新为所需的任何内容,但要确保它不会太少,因为它会像疯了一样循环。希望这会有所帮助。