首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PrintWriter不会写

PrintWriter不会写
EN

Stack Overflow用户
提问于 2016-10-12 17:26:53
回答 1查看 547关注 0票数 1

我有以下问题。我编写了一个简单的Echo Server和Echo客户端,但问题是,在服务器的循环中,我从缓冲的Reader读取,程序卡住了,它不会写。

代码语言:javascript
复制
    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()放在循环中时,一切都很好。

代码语言:javascript
复制
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

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-12 20:32:43

在发送任何东西之前,你都在阅读内坑直到流的尽头。仅当对等方关闭连接时,套接字上的流结束才会发生。同侪没有关闭连接,因为他想从其中读取您的回复。

您应该在阅读时回显每一行,而不是试着组装它们,然后将它们全部回显成一个大块。除了它不能工作之外,你的技术也浪费时间和空间。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40004783

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档