2016-04-13 22 views
-1

Ich versuche, einen Echo-Client-Server zu schreiben, aber ich bekomme keine Antwort vom Server. Weiß nicht, wo meine Fehler sind. Ich habe einige Beispiele im Internet gesehen. Einige verwenden nur InputStream/OutputStream, aber ich entschied mich für BufferedReader und PrintWriter - macht das große Unterschiede?Echo Server nicht Echo

Seite Server:

public class Server { 

public static void main(String[] args){ 
    Server server = new Server(); 
    server.runServer(Integer.parseInt(args[0])); 
} 

private void runServer(final int port){ 
    ServerSocket serversckt = null; 
    Socket socket = null; 
    BufferedReader in = null; 
    PrintWriter out = null; 

    try{ 
     serversckt = new ServerSocket(port); 
     socket = serversckt.accept(); 
     System.out.println("Request from client accepted!"); 


     in = new BufferedReader(new InputStreamReader(socket.getInputStream())); 
     out = new PrintWriter(socket.getOutputStream(), true); 

     String str; 
     while((str = in.readLine()) != null){ 
      System.out.println(str); 
      out.println(str); 
      out.flush(); 
     } 
    } 
    catch (IOException e) { 
     System.out.println(e.getMessage()); 
    } 

} 
} 

Client-Seite:

public class Client{ 

public static void main(String[] args){ 
    Client client = new Client(); 
    client.runClient(Integer.parseInt(args[0]), args[1]); 
} 

private void runClient(final int port, final String hostname){ 
    Socket sckt = null; 
    try{ 
     sckt = new Socket(hostname, port); 
     BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in)); 
     BufferedReader in = new BufferedReader(new InputStreamReader(sckt.getInputStream())); 
     PrintWriter out = new PrintWriter(sckt.getOutputStream(), true); 

     String str; 
     while((str = stdIn.readLine()) != null){ 
      out.println(str); 
      System.out.println(in.readLine()); 
     } 

    } catch(IOException e){ 
     System.out.println(e.getMessage()); 
    } 
} 

Dank!

+0

Ich denke nicht, dass 'while ((str = in.readLine())! = Null)' im Server ist ein blockierender Aufruf, so wird es beim ersten Lesevorgang 'null' und es wird dann beendet der Server. Vielleicht hat jemand anderes mehr Wissen über den 'BufferedReader' und ob er dort blockiert. – Tom

+1

Können Sie wirklich einen Echo-Server anrufen, der keinen * echo * -Server zurückgibt? – SergeyA

+0

@thatotherguy Das ist wahrscheinlich der Punkt: Lesen Sie von der Konsole, senden Sie das an den Server und lesen Sie sein "Echo". @OP 'System.out.println (in.readLine());' kann auch nicht blockieren, so wird es "nichts" lesen, da der Server offline ist (lies meinen ersten Kommentar) oder hatte nicht die Zeit dazu Antworten. – Tom

Antwort

1

Ich kann Ihr Problem nicht reproduzieren. Ich fügte die fehlenden Importe und das letzte } in Client.java hinzu, kompilierte und führte den Server und den Client in verschiedenen Terminals aus.

Auftraggeber:

$ Java-Client 2000 localhost
foo
foo
bar
bar

Server:

$ java Server 2000
Anfrage vom Kunden angenommen!
foo
bar

Jedes Mal, wenn ich etwas in den Client-Fenstern geschrieben, wurde es wieder zu mir hallen, und die gleiche Linie zeigte auf dem Server auf.

+0

Ich habe meinen Fehler gefunden (es war Eclipse)! Der Code ist in der Tat richtig! – emilieee