无法从输出流中读取

时间:2018-04-08 12:16:59

标签: java sockets input output

我有一个服务器将一个String发送到套接字客户端。当我尝试从客户端获取String的内容时,它不会读取它。 服务器通过以下方式发送:

output.write(res); output.flush(); // I checked res content and it is all good

此客户收到:

public class Client {
public static void main(String[] args) throws IOException{
    Socket connexion = new Socket(InetAddress.getLocalHost(), 33333);

    BufferedReader input = new BufferedReader(
            new InputStreamReader(connexion.getInputStream(), "8859_1"), 1024);
    String res="";
    while(input.readLine()!=null){
        res += input.readLine()+"\n";
    }
    System.out.println(res);
}}

建议好吗?谢谢

1 个答案:

答案 0 :(得分:1)

问题是你正在阅读下一行,然后忽略它,然后再次尝试阅读下一行。第二次读取下一行时,没有数据,因为第一次读取已经消耗了它:

while(input.readLine()!=null){
    res += input.readLine()+"\n";
}

尝试以下内容:

String line = null;
while((line = input.readLine()) != null) {
    res += line + "\n";
}

正如@JB Nizet所提到的,这取决于服务器实际向客户端发送换行符以终止消息。如documentation for readLine()中所述:

  

读取一行文字。一条线被认为是任何一条线终止的   换行(' \ n'),回车(' \ r')或回车   然后立即换行。