Java PrintWriter赢得';不写

Java PrintWriter赢得';不写,java,network-programming,bufferedreader,printwriter,Java,Network Programming,Bufferedreader,Printwriter,我有以下问题。 我编写了一个简单的Echo服务器和Echo客户端,但问题是,在服务器的循环中,我从缓冲读取器读取数据,程序卡住了,无法写入 import java.net.*; import java.util.*; import java.io.*; public class SimpleServer { public static void main(String[] args) { System.out.println("Dies ist ein simpler Ech

我有以下问题。 我编写了一个简单的Echo服务器和Echo客户端,但问题是,在服务器的循环中,我从缓冲读取器读取数据,程序卡住了,无法写入

    import java.net.*;
import java.util.*;
import java.io.*;
public class SimpleServer {
  public static void main(String[] args) {
    System.out.println("Dies ist ein simpler Echo Server");
    int port = 6000;
    try {
      ServerSocket server = new ServerSocket(port);                       
      //server.setSoTimeout(30000);                                       
      System.out.println("Warte auf anfrage");                            
      Socket client = server.accept();                                   
      InputStream is = client.getInputStream();          
      InputStreamReader isr = new InputStreamReader(is);                  
      BufferedReader reader = new BufferedReader(isr);                   
      String message = null;                                              
      while ((message = reader.readLine())!=null) {                       
        System.out.println("Nachricht vom Client "+message);              
      }
      OutputStream os = client.getOutputStream();                        
      PrintWriter writer = new PrintWriter(os);                          
      System.out.println(message);
      writer.println(message);                                           
      writer.flush();                                                    

      writer.close();                                                    
    } catch(IOException e) {
      e.printStackTrace();
    }  // end of try
  } // end of main
} // end of class SimpleServer
但是当我把
.println()
.flush()
放在循环中时,一切都很好

import java.net.*;
import java.util.*;
import java.io.*;
public class SimpleServer {
  public static void main(String[] args) {
    System.out.println("Dies ist ein simpler Echo Server");
    int port = 6000;
    try {
      ServerSocket server = new ServerSocket(port);                       
      //server.setSoTimeout(30000);                                       
      System.out.println("Warte auf anfrage");                            
      Socket client = server.accept();                                    
      InputStream is = client.getInputStream();                            
      InputStreamReader isr = new InputStreamReader(is);                 
      BufferedReader reader = new BufferedReader(isr);                        
      OutputStream os = client.getOutputStream();                         
      PrintWriter writer = new PrintWriter(os);                          
      String message;                                                     
      while ((message = reader.readLine())!=null) {                       
        System.out.println("Nachricht vom Client "+message);              
        writer.println(message);                                           
        writer.flush();                                                     
      } 
      writer.close();                                                     
    } catch(IOException e) {
      e.printStackTrace();
    }  // end of try
  } // end of main
} // end of class SimpleServer

我的问题是,为什么它会陷入循环

在发送任何内容之前,您一直在读取输入信息,直到流结束。套接字上的流结束仅在对等方关闭连接时发生。对等方尚未关闭连接,因为他想从中读取您的回复


你应该在阅读时重复每一行,而不是试图把它们全部组合起来,然后在一大块中重复它们。除了无法工作之外,您的技术还浪费时间和空间。

谢谢您的回答。是的,我希望流在为空时给出null。当然,这是没有意义的,但是阅读文本的长度和行数是可变的。是否有类似的
扫描仪
方法
hasNext()
。要提供当读取所有文本时,服务器将退出循环?