Java Problem

Hier kann über alles diskutiert werden, wirklich alles. Betonung liegt auf "diskutiert", das ist also kein Freischein zum Spammen.
(Beitragszähler deaktiviert)
Antworten
Benutzeravatar
Piru
Kopolaspinne
Beiträge: 733
Registriert: 28. Okt 2006, 10:49

Java Problem

Beitrag von Piru » 5. Nov 2008, 17:05

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
Bild

Benutzeravatar
vnv_nation
Feuervogel
Beiträge: 4533
Registriert: 7. Mär 2004, 02:46

Re: Java Problem

Beitrag von vnv_nation » 6. Nov 2008, 13:35

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.

Benutzeravatar
Piru
Kopolaspinne
Beiträge: 733
Registriert: 28. Okt 2006, 10:49

Re: Java Problem

Beitrag von Piru » 6. Nov 2008, 15:24

Dankeschön,
das "startsWith" hat das Problem gelöst :)
Bild

Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 269 Gäste