PrintWriter 不会写

PrintWriter won't write

我有以下问题。 我编写了一个简单的 Echo Server 和 Echo Client,但问题是在服务器的循环中,我从 Buffered Reader 读取的地方,程序卡住了,不会写入。

    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

我的问题是为什么它会卡在循环中?

在发送任何内容之前,您正在阅读 inpit 直到流结束。套接字上的流结束仅在对等方关闭连接时发生。对端没有关闭连接,因为他想从它那里读取你的回复。

你应该在阅读每一行时回显它,而不是试图 assemble 全部然后将它们全部回显成一个大块。除了它不起作用之外,您的技术还浪费时间和 space.