Java server/client 应用程序仅在按下 enter 时显示消息

Java server/client application only displays messages upon pressing enter

服务器端:

try {
    ServerSocket server_socket=new ServerSocket(port_number);
    Socket client_socket= server_socket.accept();
    PrintWriter output = new PrintWriter(client_socket.getOutputStream(),true);
    BufferedReader input = new BufferedReader(new InputStreamReader(client_socket.getInputStream()));
    BufferedReader stdIn=new BufferedReader(new InputStreamReader(System.in));
    String userInput, clientOutput;
    while ((userInput=stdIn.readLine())!="EXIT") {
        if ((clientOutput=input.readLine())!=null) {
            System.out.println("Client: "+clientOutput);
        } if (userInput!=null) {
            output.println(userInput);
            output.flush();
        }
    }
}

客户端:

try {
    Socket client_socket= new Socket(hostname,port_number);
    PrintWriter output = new PrintWriter(client_socket.getOutputStream(),true);
    BufferedReader input = new BufferedReader(new InputStreamReader(client_socket.getInputStream()));
    BufferedReader stdIn=new BufferedReader(new InputStreamReader(System.in));

    String userInput,serverOutput;
    while ((userInput=stdIn.readLine())!="EXIT") {
        if ((serverOutput=input.readLine())!=null) {
            System.out.println("Server: "+serverOutput);
        } if (userInput!=null) {
            output.println(userInput);
            output.flush();
        }
    }
}

我的例子中的代码对我来说很有意义,我似乎无法弄清楚为什么仍然需要按 enter,这与 .readLine() 有什么关系吗? 我检查了以下 post Server Client in Java only displays message when I press enter,但是提供的解决方案无法解决问题。

注意:while 循环中最初没有 if 语句。我认为这是一个问题的方式是 while 循环可能卡在其中一行,等待 user/server 输入。因此,实施 if 语句允许它跳过等待部分并重新运行 循环。

does it have something to do with .getLine()?

是的。如果您查看 Javadoc for BufferedReader#readLine(),它清楚地表明行尾字符终止了要读取的字符串:

Reads a line of text. A line is considered to be terminated by any one of a line feed ('\n'), a carriage return ('\r'), or a carriage return followed immediately by a linefeed.

原来我混淆了我的变量。 while 循环应该是:

 while ((userInput=input.readLine())!="EXIT") {

已修复,但还有一些其他问题