2016-09-25 1 views
0

Ich habe eine einfache Klasse erstellt, die eine Zeichenfolge an einen Server sendet. Beide kommunizieren über die Java Sockets-API. Der Server liest, was der Client gesendet hat, und antwortet mit einer anderen Zeichenfolge. Aber der Client kann diese Antwort nicht lesen.Server-Antwort mit Java-Sockets-API lesen

Dies ist die Client-Klasse:

import java.io.IOException; 
import java.net.Socket; 

public class Client { 

    public static void main(String[] args) throws IOException { 
     Socket socket = new Socket("localhost", 8181); 
     socket.getOutputStream().write("Hello".getBytes()); 

     int read; 
     while ((read = socket.getInputStream().read()) > -1) { 
      System.out.print((char) read); 
     } 

     socket.close(); 
    } 

} 

Und dies ist die Serverklasse:

import java.io.IOException; 
import java.net.ServerSocket; 
import java.net.Socket; 

public class Server { 

    public static void main(String[] args) throws IOException { 
     ServerSocket serverSocket = new ServerSocket(8181); 

     while (true) { 
      Socket socket = serverSocket.accept(); 
      int read; 
      while ((read = socket.getInputStream().read()) > -1) { 
       System.out.print((char) read); 
      } 

      socket.getOutputStream().write("Hi!".getBytes()); 
     } 

    } 

} 

Ich stelle ich vor, dass das Problem in dem Client-Ausführungsablauf sein kann, weil ich weiß, don `t Wie kann ich auf eine Serverantwort warten? Mit anderen Worten, wie kann man einen Client implementieren, der die Serverantwort lesen kann?

Antwort

1
  1. Sie schließen die Sockets nicht.
  2. Der Server versucht, bis zum Ende des Streams zu lesen und dann eine Antwort zu senden. Das Ende des Streams tritt nur auf, wenn der Peer die Verbindung schließt. Daher ist es nicht möglich, eine Antwort zu senden, selbst nachdem Sie den Fehler behoben haben (1). Sie müssen eine Nachricht lesen, was auch immer das in Ihrem Anwendungsprotokoll bedeutet.
+0

Das ist richtig, wegen der 'while ((= socket.getInputStream(). Read())> -1)' der Server wartet, bis der Client die Verbindung schließt. –

0

Sie müssen den Ausgangsstrom spülen oder schließen.

Verwandte Themen