BufferedReader一直在等待响应

时间:2016-02-04 03:12:12

标签: java client client-server bufferedreader

我有一台服务器和客户端在本地服务器上运行。

我这样从服务器上读到:

br = new BufferedReader(new InputStreamReader(socket.getInputStream()));

public static String readResponse() throws IOException{
    String response = "";
    String line;
    while((line = br.readLine()) != ""){
        System.out.println("s: " + line);
    }
    return response;

}

我从服务器得到响应,但程序停止,并且不会从那里去任何地方:

Please enter option number: 1 
c: MSGGET
s: 200 OK
s: Go for it now. The future is promised to no one.

它只是挂在这里,当它想继续。

我也尝试过:

while((line = br.readLine()) != null){

它一直在等待。是否有任何可能在服务器上我必须更改告诉客户端我已完成传输数据。

请帮忙!谢谢!

3 个答案:

答案 0 :(得分:1)

while((line = br.readLine()) != ""){
        System.out.println("s: " + line);
    }
    return response;

}

除非您的对等方计划将空行作为消息结束标记发送,否则此循环毫无意义,并且还会错误地比较字符串。

  

我得到了服务器的响应,但程序停止了,并没有从那里去任何地方。

正在等待一条永不到来的空行。它忽略了流状态的结束。

while((line = br.readLine()) != null){

现在这个循环是正确的,但它不会退出直到流结束,直到对等方关闭连接才会发生。

  

它一直在等待。

这应该是什么。

答案 1 :(得分:-1)

试试这个:

br = new BufferedReader(new InputStreamReader(socket.getInputStream()));

    public static String readResponse() throws IOException{
        String response = "";
        String line;
        while((line = br.readLine()) != "" || (line = br.readLine()) != null)){
            System.out.println("s: " + line);
        }
        return response;

    }

如果这不起作用,那么您需要检查是否在服务器端的流末端发送了一些特殊字符。然后对该字符进行检查。

答案 2 :(得分:-1)

我最终使用了这个:

while(!(line = br.readLine()).equals("exit")){

我要求负责服务器的人在写完回复后打印以下内容:

//this was initiated at the beginning of the program
out = new PrintWriter(socket.getOutputStream(), true);

out.println("exit");

到目前为止,这似乎对我有用! 谢谢你们每一个人的帮助!