2014-11-06 98 views
1

下面的代码工作,服务器获取com字符串,然后连接关闭,如果我取消注释bw.flush()及其下一行,服务器不会收到com字符串并且它只是在br.readLine()上等待响应(因为服务器没有收到com字符串,所以不会得到响应),如果我移动bw.close()并将其置于bw.flush()位置,则br.readLine()将引发Socket关闭异常。套接字BufferedWriter.flush()不发送数据

public static void setupClient(String[] args) throws UnknownHostException, IOException{ 
    Socket client = new Socket(InetAddress.getLocalHost().getHostName(), Server.DEFAULT_COMMAND_PORT); 
    BufferedWriter bw =new BufferedWriter(new OutputStreamWriter(client.getOutputStream())); 
    BufferedReader br =new BufferedReader(new InputStreamReader(client.getInputStream())); 
    String com=args[0]+(args.length==2?args[1]:""); 
    bw.write(com); 
// bw.flush(); 
// System.out.println("response:"+br.readLine()); 
    bw.close(); 
    client.close(); 
} 

回答

2

您正在阅读的文章,但您并未撰写文章。 readLine()在读取行结束符或流结束时返回。这就是为什么当对方关闭而不是刷新时它可以工作。您需要在您的write().

之后使用 BufferedWriter.newLine()