Java 为什么网络输入流不止一次工作?

Java 为什么网络输入流不止一次工作?,java,network-programming,inputstream,Java,Network Programming,Inputstream,网络输入流在下面代码的版本1中正常工作,因为它继续从服务器接收数据消息。 但是,在版本2中,只接收到第一条消息,然后什么也不接收 为什么不起作用?还有别的选择吗 版本1 public void run(){ try { BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream())); int c; while ((c = in.r

网络输入流在下面代码的版本1中正常工作,因为它继续从服务器接收数据消息。 但是,在版本2中,只接收到第一条消息,然后什么也不接收

为什么不起作用?还有别的选择吗

版本1

 public void run(){
    try {
        BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
        int c;
        while ((c = in.read()) != -1) {
            System.out.print((char) c);
        }
     }catch (IOException e){
          e.printStackTrace();
      }
}
版本2

 public void run(){
    try {
        BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
        while(true){
                String msg = in.readLine();
                System.out.println(msg);
            }
     }catch (IOException e){
          e.printStackTrace();
      }
}

您的第二个版本将无法工作,因为您没有检查流的结尾
readLine()
在该点返回null。应该是:

while ((line = in.readLine()) != null)
{
    // ...
}

。。。它只在读取一行时返回一行,包括一个行终止符。如果您不发送行,它就无法读取行。

并且您发送的流中有新行?就是这样。服务器没有发送线路,也没有检查流的结尾。谢谢你,伊普。我不会忘记那一课的。