套接字,BufferedWriter.flush()不发送数据

时间:2014-11-06 23:53:08

标签: java sockets bufferedreader serversocket bufferedwriter

以下代码有效,服务器获取com字符串,然后连接关闭,如果我取消注释bw.flush()及其下一行,服务器不再获取com字符串,它只是在br.readLine()上等待响应(由于服务器没有得到com字符串,因此无法获取),如果我移动bw.close()并将其置于bw.flush()位置br.readLine()会抛出一个Socket关闭异常。

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();
}

1 个答案:

答案 0 :(得分:3)

你正在读行,但你不是在写行。 readLine()在读取行终止符或流结束时返回。这就是为什么它在对等关闭而不是刷新时起作用的原因。您需要在BufferedWriter.newLine()

之后使用write().