2016-11-09 1 views
-1

Ich versuche, ein kleines Beispiel mit Java-Sockets zu machen. Aber ich kann es nicht funktionieren lassen. Der Server erhält die Petition des Clients korrekt. Aber das Problem kommt, wenn ich versuche, den String "Hallo" an den Server zu senden.Verbindung zwischen Java-Socket-Server und Socket-Client

Wie ich debuggte, ist der InputStream im Server null, so dass nichts gedruckt wird. Ich denke, dass das Problem in dem PrinterWriter sein muss, vielleicht soll ich eine andere Klasse verwenden, i mit anderen Klassen wie BufferedWriter versucht, aber ich konnte es nicht

hier ist mein Code funktioniert

Server

public class ServidorFechaHora { 

    static final int port = 5000; 
    static String line; 

    public static void main(String[] args) throws IOException { 
     // TODO Auto-generated method stub 
     ServerSocket ss = new ServerSocket(port); 
     while (true) { 
      /* accept nos devuelve el Socket conectado a un nuevo cliente. 
      Si no hay un nuevo cliente, se bloquea hasta que haya un 
      nuevo cliente. 
      */ 
      Socket soc = ss.accept(); 
      System.out.println("Cliente conectado"); 
      // Obtenemos el flujo de entrada del socket 
      InputStream is = (InputStream) soc.getInputStream(); 
      //Función que llevaría a cabo el envío y recepción de los datos. 
      processClient(is); 
     } 
    } 

    private static void processClient(InputStream is) throws IOException { 
     // TODO Auto-generated method stub 
     BufferedReader bis = new BufferedReader(new InputStreamReader(is)); 

     while ((line = bis.readLine()) != null){ 
      System.out.println(line); 
     } 

     bis.close(); 
    } 

} 

Client

public class ClienteFechaHora { 
    public static void main(String[] args) throws IOException, InterruptedException { 
     Socket client = null; 
     PrintWriter output = null; 
     //BufferedOutputStream out = null; 
     DateFormat hourdateFormat = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss"); 

     try { 
       client = new Socket("127.0.0.1", port); 
       output = new PrintWriter(client.getOutputStream(), false); 

       while (true) { 
        System.out.println("Enviando datos..."); 
        output.write("hello"); 
        output.flush(); 
        Thread.currentThread().sleep(2000); 
        //System.out.println("Fecha y hora: " + hourdateFormat); 
       } 
     } 
     catch (IOException e) { 
      System.out.println(e); 
     } 
     output.close(); 
     client.close(); 
    } 
} 

Vielen Dank im Voraus!

+0

Ich habe gerade überprüft den Server mit meinem zu ändern Dummy-Client und funktioniert gut –

+0

Der Eingabestream auf dem Server ist nie null. Unklar, was du verlangst. – EJP

+0

EJP Wie gesagt, ich versuche, die Zeichenfolge "Hallo" vom Client an den Server zu senden und es in der Servermethode "ProcessClient" anzuzeigen. Ich denke, es ist klar, was ich versuche, nur die Beschreibung oder den Code zu lesen. Bitte lesen Sie das nächste Mal genauer, anstatt mir negative Punkte zu geben. :) – Javi

Antwort

1

Ihr Server aus der Steckdose line-by-line liest:

BufferedReader bis = new BufferedReader(new InputStreamReader(is)); 

while ((line = bis.readLine()) != null){ 
    System.out.println(line); 
} 

BufferedReader.readLine() dokumentiert ist wie folgt:

Liest eine Textzeile. Eine Zeile wird entweder durch einen Zeilenvorschub ('\ n'), einen Wagenrücklauf ('\ r') oder einen Zeilenumbruch gefolgt von einem Zeilenvorschub beendet.

So kommt es nicht zurück, bis es einen Zeilenabschluss liest. nur das Schreiben der Zeichenfolge „Hallo“ ohne Leitungsabschluss

Ihr Kunde auf der anderen Seite ist:

output.write("hello"); 
output.flush(); 

Wenn Sie eine Textzeile auf dem Server lesen möchten, müssen Sie eine Zeile senden von Text (einschließlich eines Leitungsabschluss) im Client:

output.write("hello\n"); 
output.flush(); 
-1

Ihr Problem scheint, dass der Printwriter zu sein, ist ein „zeichenorientierte“ Strom, der auf die Writer-Klasse erweitert. Und auf dem Server versuchen, die Daten mit einem Inputstream zu holen, die „byteorientierte“ ist und sich Input

Versuchen Sie, den Client zu

in = new BufferedReader (new InputStreamReader (sock. getInputStream()); 
Verwandte Themen