2017-02-14 9 views
1

Ich versuche, einen Scanner eine Zeile zu lesen, senden Sie es sofort über einen printStream an einen Client, der es drucken und dann auf eine andere Zeile vom Server warten soll.Java PrintStream sofort zu outputStream mit Scanner und Schleife

Mein Client bleibt nach dem Drucken der ersten Nachricht hängen und gibt danach nur null zurück. Ich denke, ich sollte printStream.close() nicht in Server.java aufrufen, aber die Nachricht wird erst übertragen, wenn ich sie schließe. printSteam.flush scheint nichts zu tun.

Der entsprechende Code:

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

Vielen Dank für Ihre Hilfe!

+0

Was ist 'outputStream'? – shmosel

+0

Es ist ein normaler OutputSteam. Ich habe das Snippet aktualisiert. – JoJota

Antwort

1

Sobald Sie den PrintStream geschlossen haben, ist es fertig. Wenn es eine Socket-Verbindung gibt, wird diese Verbindung geschlossen. Erstellen Sie stattdessen den PrintStream außerhalb der Schleife, und schließen Sie ihn nicht.

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

Danke, aber mein Kunde wird jetzt keine Nachricht drucken. – JoJota

+0

Okay, ich habe es mit dem Hinzufügen von \ n nach der Nachricht arbeiten! – JoJota

+0

@JoJota Großartig! Wenn Sie einen Moment haben, klicken Sie bitte auf das grüne Häkchen, um anzuzeigen, dass dies Ihr Problem gelöst hat – ControlAltDel