2017-04-06 6 views
-1

Ich führe diesen Code und wenn ich Byte-Array namens Puffer erstellen, wird es durch 0 initialisiert, also wenn ich die .read() Funktion mache, wartet es nicht, irgendetwas zu lesen, weil der Puffer ist voll. Wenn ich den Puffer deklarieren und itialize und drucken, wenn danach, ist es voller Nullen und so weiter lesen es nicht warten, um Daten aus dem Socket zu empfangen.Bytes von Socket auf Java lesen

Ich möchte Bytes aus ac Server erhalten speichert, die eine char [] Nachricht

public class th extends Thread { 
    public static ServerSocket sc; 
    public static byte[] buffer = new byte[256]; 

    public th(){ 
     sc = null; 
    } 

    public th (ServerSocket userSC){ 
     sc = userSC; 
    } 

    public void run() { 
     System.out.println("En la clase TH"); 
     Socket serverAddr; 
     boolean condicion = true; 
     DataInputStream in; 
    int p; 

    for (p = 0; p < 256; p++) System.out.print(buffer[p] + " "); 
     /*try { 
      serverAddr = sc.accept(); 
      in = new DataInputStream(serverAddr.getInputStream()); 
     } 
     catch (Exception e){ 
      System.err.println("Error creando socket"); 
     }*/ 
     try { 
      System.err.println("-1---------------------------------"); 
      serverAddr = sc.accept(); 
      in = new DataInputStream(serverAddr.getInputStream()); 
      System.err.println("0---------------------------------"); 
      System.err.println("1---------------------------------"); 

      in.read(buffer); 
      for (p = 0; p < 256; p++) System.out.print(buffer[p] + " "); 
      int a = in.read(buffer); 
      if (a < 0) { 
       exit(); 
      } 
      for (p = 0; p < 256; p++) System.out.print(buffer[p] + " "); 
      String res = new String(buffer); 
      System.out.println(res); 
      System.out.println("NO ESPERA"); 
      serverAddr.close(); 
     } 
     catch (IOException e){ 
      System.err.println("Error creando socket"); 
     } 
    } 
} 
+1

Bitte nehmen Sie sich etwas Zeit, um Ihren Code lesbar zu formatieren und konventionelle Namen zu verwenden - Sie sollten Ihre Frage so einfach wie möglich stellen. Es hilft nicht, dass Sie den von 'read' zurückgegebenen Wert ignorieren ... –

+0

Es hat nichts mit den Anfangswerten des Puffers zu tun. Der einzige Grund, warum diese Cide nicht darauf wartet, etwas zu lesen, ist, wenn 'read()' -1 zurückgibt, eine Möglichkeit, die Sie ignorieren, was darauf hinweist, dass der Peer die Verbindung geschlossen hat. Bitte formatieren Sie dieses unlesbare Chaos. – EJP

+0

Ja, die Funktion read() gibt -1 zurück, aber ich kenne den Grund nicht. Wenn Sie mir helfen können .... :( – MrSman

Antwort

0

Ich Ausführen dieses Code sendet und wenn ich Byte-Array erstellen Puffer genannt, wird es von 0

initialisiert

Korrekt, vorausgesetzt, Sie meinen "initialisiert mit Nullen".

Also wenn ich die .read() - Funktion mache, wartet es nicht, irgendetwas zu lesen, weil der Puffer voll ist.

Falsch, ja ganz und gar Unsinn. Da alle primitiven Arrays in Java auf Nullen initialisiert werden, würde das, was Sie vorschlagen, alle I/O vollständig unmöglich machen, was es offensichtlich nicht ist. Der Vorschlag fängt nicht an, einen Sinn zu ergeben.

Wenn ich den Puffer deklariere und initialisiere und ihn danach drucke, ist er voller Nullen, also lese nicht, dass er Daten vom Socket empfängt.

Wieder ist das Unsinn. Das tatsächliche Problem ist, dass read() -1 zurückgibt, um anzuzeigen, dass der Peer die Verbindung getrennt hat. Sie ignorieren diesen Rückgabewert vollständig.

Wenn es positiv ist, sollten Sie es anstelle von 256 auch verwenden, um Ihre Druckschleifen zu begrenzen. Es gibt keine Garantie, dass read() den Puffer füllt.

NB serverAddr ist eine Socket, keine 'Adresse'. Verwenden Sie keine irreführenden Variablennamen. Die erste Person, die du täuschen wirst, bist du selbst.