Seite 1 von 1

Java Problem

Verfasst: 5. Nov 2008, 17:05
von Piru
Hallo,

Ich versuche mich zur Zeit an Netzwerkprogrammierung... der nachfolgende Code-Ausschnitt stammt aus einem Client, der am Port 4723 lauscht und dort Pakete entgegennimmt, um aus seinem Inhalt einen String zu machen und diesen auszuwerten bzw. auszugeben.

Code: Alles auswählen

 private void empfangen(InetAddress ia, DatagramSocket socket) throws SocketException, IOException, InterruptedException{
        
        while ( run == 2 ) { 
          // Auf Anfrage warten 

          DatagramPacket packet = new DatagramPacket( new byte[1024], 1024 ); 
          socket.receive( packet ); 

          // Empfänger auslesen 

          byte[]      data    = packet.getData(); 
          String output = new String (data);  
          
         if (output.equals("write")){       
              System.out.println("Du kannst jetzt schreiben.");
              System.out.println("");
              run = 1;
             // Schleife wird beendet
          }
          else{
              System.out.println(output);
              System.out.println("");          
                run = 2;
          }
      }
  
Das Problem hierbei liegt, dass wenn der Server den String "write" aussendet, er vom Client nicht als solcher interpretiert wird. Für ihn ist die Prüfung " output.equals("write") " falsch, obwohl anschliessend der String output als "write" in der Konsole ausgegeben wird.
Dadurch wird die Schleife nicht beendet, in der der Client Pakete empfängt.
Diese Schleife muss aber beendet werden, damit der Client in der Lage ist, einen neuen String einzulesen und an den Server zu senden.
Alles andere funktioniert. Der Client kann einen String einlesen und senden, gerät danach in die o.g. Schleife und kann auch Nachrichten vom Server empfangen und ausgeben. Er erkennt nur nicht, dass output.equals("write") wahr ist, was ich nicht verstehe.
Ich hoffe, hier Hilfe zu finden :)

MfG
* Piru

Re: Java Problem

Verfasst: 6. Nov 2008, 13:35
von vnv_nation
Steuerungendekennzeichen könnte das Problem sein ->

mach mal nen Sysout von output vor dem Vergleich

Code: Alles auswählen

if (null != output) { sysout("out: " + output); }
falls da write stehen sollte, wäre ein Gedanke:
write\0\n ist nicht equal("write") -> startsWith("write") << versuch das mal ...

ließe sich mit

Code: Alles auswählen

String output = (new String(data)).trim();
ggf. auch als equals-Vergleich lösen.

Das Steuerungendekennzeichen wird meines Wissens nach beim Senden mit angehängt, egal welche Methode du dafür verwendest.

Re: Java Problem

Verfasst: 6. Nov 2008, 15:24
von Piru
Dankeschön,
das "startsWith" hat das Problem gelöst :)