2014-11-06 2 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() возвращает, когда он считывает терминатор линии или конец потока. Вот почему он работает, когда сверстник закрывается вместо промывки. Вам необходимо использовать BufferedWriter.newLine() после вашего write().