DatagramPacket korrupt?

Chasor

Aktives Mitglied
Folgendes Szenario:
Per DatagramSocket schicke ich ein DatagramPacket mit String-Inhalt von einem Client zum Server.
Im Client selbst, wir das Packet noch mit richtigem Inhalt ausgelesen, sobald das Packet aber am Server ankommt, bzw. vom Server ausgelesen wird, ist es unvollständig und beinhaltet immer genau 18 Zeichen.

Meine Frage ist jetzt, woran es liegen könnte, dass das Paket immer nach dem Empfang vom Server nicht vollständig ist. Unterbricht evtl. irgendetwas anderes das Lesen des Pakets, sodass immer nur ein Teil gelesen werden kann? Hoffe ihr könnt helfen.

Quellcode:
Packet wird im Client gefüllt und losgeschickt (inkl. Überprüfung des Inhalts):
Java:
String mess = "sendMessage :: " + username + " ;; " + kv[0] + " ;; " + kv[1];
        	   System.out.println(mess);
        	   ba = mess.getBytes();
        	   packet.setData( ba, 0, ba.length );
        	   socket.send( packet );
        	   String testoutput = new String(packet.getData(), 0, packet.getLength());
        	   System.out.println(testoutput);
(hier stimmt alles noch im Paket)

Paket wird vom Server gelesen, Inhalt in einen String gepackt und angezeigt:
Java:
socket.receive( packet );
	           InetSocketAddress add = (InetSocketAddress)packet.getSocketAddress();

	           // Text aus Paket extrahieren
	           String text = new String(packet.getData(), 0, packet.getLength());
	           System.out.println(text);
(hier werden nur die ersten 18 Zeichen des kompletten - eigentlich im Paket vollständig enthaltenen - Strings ausgegeben/ausgelesen)

Weiß jemand Rat?
 

ice-breaker

Top Contributor
Wie hast du denn dein DatagramPacket beim Receiver erstellt?
Bei deiner (höchstwahrscheinlich) kleinen Datenmenge ist eine Fragmentation des UDP-Packets auch relativ unrealistisch.
 

Chasor

Aktives Mitglied
Hab den Fehler gefunden. Es lag daran, dass der Receiver in einer for-Schleife empfangen hat, die Packets aber nur einmal außerhalb der for-Schleife vorher erstellt wurden. Hab die Packet-Erstellung dann mit in die for-Schleife genommen und voila :p.
 

Ähnliche Java Themen


Oben