2017-02-14 3 views
1

Я пытаюсь скопировать сканер, чтобы прочитать строку, отправить ее немедленно через printStream клиенту, который должен его распечатать, а затем ждать еще одной строки с сервера.Java PrintStream немедленно для выводаStream со сканером и контуром

Мой клиент продолжает застревать после печати первого сообщения и только возвращает null после этого. Думаю, я не должен вызывать printStream.close() в Server.java, но сообщение не будет передано, пока я его не закрою. printSteam.flush, похоже, ничего не делает.

Соответствующий код:

Server.java

 ServerSocket serverSocket = new ServerSocket(1234); 
     Socket connectionSocket = serverSocket.accept(); 
     OutputStream outputStream = connectionSocket.getOutputStream(); 

     Scanner sc = new Scanner(System.in); 

     while(true) { 

      System.out.print("Pass me a message: "); 
      String input = sc.nextLine(); 

      final PrintStream printStream = new PrintStream(outputStream); 
      printStream.print(input); 
      printStream.flush(); 
      printStream.close(); 
     } 

Client.java

 Socket connectionSocket = new Socket("localhost", 1234); 
     InputStream inputStream = connectionSocket.getInputStream(); 

     String result = ""; 
     BufferedReader inFromServer = new BufferedReader(new InputStreamReader(inputStream)); 

     while (true) { 

      result = inFromServer.readLine(); 
      System.out.println("Message: "+result); 
     } 

Спасибо за вашу помощь!

+0

Что такое 'outputStream'? – shmosel

+0

Его нормальный OutputSteam. Я обновил фрагмент. – JoJota

ответ

1

Как только вы закроете PrintStream, все будет готово. Если за ним есть соединение сокета, оно закроет это соединение. Вместо этого создайте PrintStream вне вашего цикла и не закрывайте его

final PrintStream printStream = new PrintStream(outputStream); 
    while(true) { 

     System.out.print("Pass me a message: "); 
     String input = sc.nextLine(); 

     printStream.print(input); 
     printStream.flush(); 
    } 
+0

Спасибо, но мой клиент не будет печатать какое-либо сообщение сейчас. – JoJota

+0

В порядке, я получил его с добавлением \ n после сообщения! – JoJota

+0

@JoJota Отлично! Когда у вас есть момент, нажмите зеленую галочку, чтобы указать, что это решило вашу проблему – ControlAltDel

Смежные вопросы