2016-05-14 10 views
0

Ich stecke fest, um weiterzukommen. Diese while-Schleife scheint zu hängen, wenn Zeilen von einem Socket empfangen werden.Java, Probleme mit BufferedReader in einer While-Schleife

Hier ist die Server-Seite des Codes:

out = new PrintWriter(socketcliente.getOutputStream(), true); 
in = new BufferedReader(new InputStreamReader(socketcliente.getInputStream())); 
//receive and shows client data 
      linea = 0; 
      while ((buffer[linea] = in.readLine()) != null) { 
       System.out.println(buffer[linea]); 
       linea = linea+1; 
      } 
//asks for a command and sends it to client 
      System.out.println("Enter remote command"); 
      while ((input = scanner.nextLine()) != null) { 
       out.println(input); 
      } 

und hier ist die Client-Seite:

out = new PrintWriter(socketcliente.getOutputStream(), true); 
in = new BufferedReader(new InputStreamReader(socketcliente.getInputStream())); 
//sends a limited amount of lines to the server 
linea = 0; 
     while (buffer[linea] != null) { 
      out.println(buffer[linea]); 
      linea = linea+1; 
     } 
//receive the command from server, executes and save output for sending to the server 
     while ((comandor = in.readLine()) != null) { 
      proceso = Runtime.getRuntime().exec(comandor); 
      pinput = new BufferedReader(new InputStreamReader(proceso.getInputStream())); 
      buffer = new String[100]; 
      linea = 0; 
      while ((psalida = pinput.readLine()) != null) { 
       buffer[linea] = psalida; 
       linea = linea+1; 
      } 
     } 

Nachdem der Server druckt die Daten, die er empfängt, es tut nichts, noch die while-Schleife verlassen . Muss Daten an den Client senden. Ich verwende PrintWriter und BufferedReader.

Bearbeitet: Vollständigeren Code zu verstehen, was ich versuche. Die Ausführung des Befehls und der Ausgabe läuft gut, das Problem besteht darin, die Daten auf dem Server zu empfangen, alle Daten zu erhalten, aber am Ende zu stoppen und die erste while-Schleife nicht zu verlassen. Wie kann ich zulassen, dass die Schleife verlassen wird? Ich habe versucht, nach der Nachricht einen Null-Byte von dem Client sendet, oder ein „quit Text“, dass der Server wie verstehen:

while ((buffer[linea] = in.readLine()) != null && (buffer[linea] = in.readLine()) != "quit")

Ich bin verloren und konnte nicht gefunden werden, wie zu tun.

Alle diese sind in Versuch Aussagen. Nichts funktioniert. Ich bin ein Anfänger, danke für deine Hilfe.

+2

Der Leser wird nicht null zurück, bis die Buchse schließen. – matt

+0

Ihr Code scheint im Allgemeinen sehr fehleranfällig zu sein. Wir wissen nicht, was Sie erreichen wollen. Wie Puffer = neuer String [100]; kann einen Überlauf verursachen, wenn Sie nicht auf 100 Zeilen beschränkt sind. – vladaman

Antwort

3

In Ihrem server side Code die Inkrementierung Linie, die Sie für line geschrieben haben, ist falsch, muss sie als line = line+1; korrigiert werden, so dass die gesamte `Server-Side-Code wie unten

line = 0; 
while ((buffer[line] = in.readLine()) != null) { 
    System.out.println(buffer[line]); 
    line++; 
} 
-1

lesen String in einen String stattdessen aussehen muss - weniger Zuweisungen, schneller und eaasier:

StringBuilder builder = new StringBuilder(); 
String aux = ""; 
BufferedReader pinput = new BufferedReader(new InputStreamReader(process.getInputStream())); 

while ((aux = pinput.readLine()) != null) { 
    builder.append(aux); 
} 

String text = builder.toString();