Das UDP DatagramPaket und seine Länge

Status
Nicht offen für weitere Antworten.

Campino

Top Contributor
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

Top Contributor
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

Top Contributor
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.
 
G

Gast2

Gast
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

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

Empire Phoenix

Top Contributor
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)
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Länge eines Streams Netzwerkprogrammierung 4

Ähnliche Java Themen


Oben