2016-05-08 9 views
0

Ich möchte einen einfachen Server-Socket einen Client akzeptieren und einige Texte lesen und den Client von sich selbst trennen. Als Client verwende ich momentan ein Telnet, weil ich in Zukunft ein benutzerdefiniertes Programm erstellen werde.Richtig trennen Client (Telnet) von ServerSocket

ServerSocket ss = new ServerSocket(SERVER_SOCKET_PORT); 
    Socket s = ss.accept(); 

    BufferedReader reader = new BufferedReader(new InputStreamReader(s.getInputStream())); 
    String line; 
    while (true) { 
     line = reader.readLine(); 
     if (line == null || line == "" || line == "q") { 
      log("-- breaking the loop"); 
      break; 
     } 

     printf("**%s%n", line); 
    } 
    reader.close(); 
    s.close(); 
    ss.close(); 

Das Problem, das ich habe, ist die While-Schleife bricht nie.

Antwort

1

Erstens, das ist nicht, wie Sie String (s) für die Gleichheit vergleichen. Zweitens würde ich String.isEmpty() zum Testen auf Gleichheit mit "" bevorzugen. Schließlich können Sie ein try-with-resources bis close alles verwenden. So etwas wie,

try (ServerSocket ss = new ServerSocket(SERVER_SOCKET_PORT); 
     Socket s = ss.accept(); 
     BufferedReader reader = new BufferedReader(
       new InputStreamReader(s.getInputStream()))) { 
    String line; 
    while ((line = reader.readLine()) != null) { 
     if (line.isEmpty() || line.equalsIgnoreCase("q")) { 
      System.out.println("-- breaking the loop"); 
      break; 
     } 

     System.out.printf("**%s%n", line); 
    } 
} catch (Exception e) { 
    e.printStackTrace(); 
} 
1
while (true) { 
    line = reader.readLine(); 
    if (line == null || line == "" || line == "q") { 

Das Problem, das ich habe, ist die while-Schleife nie bricht.

So die Peer nie

  • schließt die Verbindung
  • eine leere Leitung sendet, die über den (nicht richtig angewendet wird) zu "" vergleicht == Operator
  • eine Zeichenfolge nur von "q" bestehend sendet plus ein Leitungsabschluss.

Der normale Weg, diese Schleife zu schreiben wäre:

while ((line = reader.readLine()) != null) 
{ 
    if (line.isEmpty() || line == "q") { 
     log("-- breaking the loop"); 
     break; 
    } 

    printf("**%s%n", line); 
} 

Aber wenn der Peer nie die "q" die Verbindung oder sendet schließt gibt es keine Möglichkeit diese Schleife wird immer verlassen. Sind Sie senden alles, was eine dieser Bedingungen produzieren würde?

trennen die Client von selbst

Dieser bedeutungslos ist. Bitte wiederholen Sie es.