# Das UDP DatagramPaket und seine Länge



## Campino (8. Aug 2009)

hi, 

Um über das DatagramSocket UDP- Pakete empfangen zu können, muss ich ihre Länge wissen. DatagramSocket.receive erwartet nämlich ein DatagramPaket als Parameter in dem sich dann das Empfangene findet. Wird mehr gesendet als das an den Konstruktor des DatagramPaket übergebene byte- Array fast, wird der Rest offensichtlich einfach abgeschnitten. 

Dummerweise enthalten meine Pakets Strings in einer Beschreibungssprache, die ich dann per JavaCC zerlege. Fehlt nun das Ende des Strings, bricht das ganze wegen Syntaxfehlern ab. Da ich den Server auf der anderen Seite nicht geschrieben habe, weiß ich aber nicht, wie lang die Strings maximal werden. Erstmal alles zu sammeln ist auch keine Alternative, mein Client soll in Echtzeit auf die Eingaben des Servers reagieren. Gibt es eine Möglichkeit zu erfahren, wie lang das nächste Paket wird bzw. Pakete unabhängig von ihrer Länge vollständig zu empfangen?


----------



## HoaX (8. Aug 2009)

Nein, das musst du mitschicken. Das selbe Problem hast du bei TCP auch.
Außerdem solltest du den Umstieg auf TCP überlegen, denn bei UDP ist auch die empfangene Reihenfolge nicht zwingend die, wie die Daten gesendet wurden.


----------



## Campino (8. Aug 2009)

Das Problem ist ja, dass ich den Server nicht selbst geschrieben habe, darauf, was der macht, habe ich keinen Einfluss. Die maximale Paketlänge irgendwie mitzuschicken, ist eigentlich eine gute Idee, dass ließe sich sogar so organisieren, dass die Empfangsreihenfolge egal ist. Aber, wie gesagt, den Server habe ich nicht geschrieben.


----------



## Gast2 (8. Aug 2009)

Moin,

der den Server geschrieben hat, hat nicht viel Ahnung ... UDP macht in den seltensten Fällen Sinn ... man hat damit meist mehr Ärger als Nutzen


die Länge muss mitgeschickt werden
eine Sequenznummer

Letzteres dient dazu die Empfangen Pakete wieder in die richtige Reihenfolge zu verpacken ... aber wenn ihr schon einen Header einbaut - wechselt gleich auf TCP

hand, mogel


----------



## Campino (9. Aug 2009)

Das heißt: Wenn der Serverprogrammierer solch einen Mechanismus nicht vorgesehen hat, habe ich keine Chance mehr?


----------



## Gast2 (9. Aug 2009)

Campino hat gesagt.:


> Das heißt: Wenn der Serverprogrammierer solch einen Mechanismus nicht vorgesehen hat, habe ich keine Chance mehr?



öhm ... es wird viel schwieriger


----------



## Empire Phoenix (30. Okt 2009)

Frage ist wie produktiv muss das system arbeiten?
Theoretsich wäre es ja möglich über dutzende tests einfach mal rauszufinden wie lang der kram ist, dann nimmst die doppelte größe und solltest relativ gut dabei sein   (Würde ich aber nie in Software einsetzten die ich verkaufe/im Unternehmen benutze)


----------

