Java服务器/客户端应用程序仅在按Enter键时显示消息

时间:2016-04-21 13:19:23

标签: java sockets networking port serversocket

服务器端:

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

我的案例中的代码对我有意义,我似乎无法弄清楚为什么还需要按下一个输入,它是否与.readLine()有关? 我查看了以下帖子Server Client in Java only displays message when I press enter,但是提供的解决方案无法解决问题。

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

2 个答案:

答案 0 :(得分:1)

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

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

它修复了它,但还存在一些其他问题

答案 1 :(得分:0)

  

是否与.getLine()?

有关

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

  

读取一行文字。一条线被认为是换行(' \ n'),回车(' \ r')或回车后紧接着换行符中的任何一条终止