Problem mit Bytes

Status
Nicht offen für weitere Antworten.

thomas.g

Bekanntes Mitglied
Hi, ich habe ein Problem mit Bytes und wäre sehr dankbar, wenn mir jemand bitte sagen würde, wie ich Bytes in einen String umwandle!

Code:
String in Bytes umwandeln und senden:

 public void send(String text, InetAddress ia, int port) {
        this.ia = ia;
        this.port = port;
        try {
            
            byte data[] = new byte[ 1024 ];
            
            text.getBytes( 0, text.length(), data, 0 );
            packet = new DatagramPacket(data,data.length,ia,port);
            DatagramSocket toSocket = new DatagramSocket();
            toSocket.send( packet );
            
        }
        catch ( Exception e ) {
            
        }
    }

Danach emfängt dies eine andere Klasse:


Code:
  try {
            byte data[] = new byte[ 1024 ];
            
            DatagramPacket packet;
            DatagramSocket socket = new DatagramSocket( port );
            
            while ( true ) {
                // Auf Anfrage warten
             DatagramSocket fromSocket = socket;
        //new DatagramSocket();

        packet = new DatagramPacket( data, data.length );
        fromSocket.receive( packet );
// Hier liegt der Fehler
        String s = "Server" + //packet.getAddress() +
                   " am Port " + packet.getPort() +
                   " gibt mit die Zeit "+
                   new String( packet.getData() );
// Es müsste gehen, doch die Ausgabe in JTextArea geht nicht!
        System.out.println( s );
      
                Thread.sleep( 1000 );
            }
          
        }
        catch ( Exception e ) {
            System.out.println( e );
        }

So, mit System.out.println geht es, doch wenn ich es mit setText in eine JTextArea gebe dann zeigt er zwar die Nachricht an, fügt aber dann noch ganz viele Kästchen (weiß nicht, vl sind das chars) hinzu!

Was ist da falsch?

thx
 
das liegt daran dass dein byte array die größe 1024 hat. probiers mal mit der länge 10 dann
müssten eigentlich weniger leerzeichen dazwischen liegen.
die bekommst du weg indem du die länge deines pakets ermittelst:
Code:
int laenge=0;

for(int i=0;i<data.length;i++){
  if(data[i]=0){
     laenge=i;
  }
}

String s = (new String(packet.getData()).substring(0,laenge));

so jetzt müsste es klappen
in der Schleife ermittelst du die Länge des data arrays, und anschliessend
schneidest du mit dem substring genau den Teil aus den du haben willst.

viele grüße
oache
 
also einfacher wäre ja glaub ich:

Code:
byte[] b = new byte[1024];
...
...
String str = String(b);
str = str.substring(0,str.indexof("\u0000"));
...

meinesachtens war \u0000 die escapesequenze für "absolut gar nix im byte array" 😉

naja viel glück beim weiterprobieren :=]

mfg

mightymop
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben