2015-04-28 2 views
1

Так что я пытаюсь сделать сервер/клиентское решение с использованием BufferedReader и BufferedWriter, но это не сработает! Использование только DataInputStream и DataOutputStream работало отлично, но ничего не распечатывалось с буферизованными объектами. Где моя ошибка?Сокеты: BufferedReader/InputStream & BufferedWriter/OutputStream не будет работать

public class TServer { 

    static final int PORT = 8001; 
    static final int QUEUE = 50; 

    public static void main(String[] args) { 
     try (ServerSocket serverSocket = new ServerSocket(PORT, QUEUE)) { 
      Socket socket = serverSocket.accept(); 
      BufferedReader input = new BufferedReader(new InputStreamReader(socket.getInputStream())); 
      BufferedWriter output = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())); 

      System.out.println(input.readLine()); 
      output.write("this is the server!"); 
      output.flush(); 
     } catch (IOException e) { 
      System.out.println(e.getMessage()); 
      e.printStackTrace(); 
     } 
    } 
} 


public class TClient { 

    static final String HOST = "localhost"; 
    static final int PORT = 8001; 

    public static void main(String[] args) { 
     try (Socket socket = new Socket(HOST, PORT)) { 
      BufferedReader input = new BufferedReader(new InputStreamReader(socket.getInputStream())); 
      BufferedWriter output = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())); 

      output.write("this is the client"); 
      output.flush(); 
      System.out.println(input.readLine()); 
     } catch (IOException e) { 
      System.out.println(e.getMessage()); 
      e.printStackTrace(); 
     } 
    } 
} 
+0

http://sourceforge.net/p/tus/code/HEAD/tree/tjacobs/io/ServerSocketEx.java#l165 может быть полезно для вас – ControlAltDel

ответ

1

Использование только DataInputStream и DataOutputStream работал прекрасно, но ничего не печатается с буферизацией объектов.

Клиент посылает следующее:

output.write("this is the client"); 

Сервер пытается прочитать строку с BufferedReader:

System.out.println(input.readLine()); 

Но ни одна строка не будет получено в конце строки terminator не отправляется (следовательно, метод блокирует (то же самое касается сервера, который не отправляет конец терминатора строки)). См. API для BufferedReader, который содержит:

Считывает текст. Линия считается завершенной любым из строк ('\ n'), возвратом каретки ('\ r') или возвратом каретки, за которым следует сразу строка.

0

Вы используете метод BufferedReader 10, поэтому вы должны написать строку с завершающим символом строки в соответствующем BufferedWriter. Как:

output.write("this is the client"); 
    output.newLine(); 
Смежные вопросы