DatagrammPacket recive

Lord_Aratorn

Mitglied
Hallo, ich stehe wiedermal for einem Problem, und zwar erhalte ich von einem Fremdsystem, das nicht in Java Programmiert wurde. Udp packete.
Nun ist die größe jeden Packetes nicht fest, daher steht im 6ten byte die Größe des Packetes, also wieviele Bytes ich einlesen muss.

nun wie kann ich es realisieren, dass mein Programm genausoviele bytes emfängt, wie es in jedem Packet angegeben ist?
Also dynamisch entscheiden wieviele bytes empfangen werden müssen.


------------------------
| ---------- |
| | | |
| ---------- |
| |
| ---------- |
| | | |
| ---------- |
| |
| ....... |
------------------------

in etwa sieht das Packet so aus, es gibt einen Rahmen, in dem mehrere Informationen über die folge Daten enthalten sind. (wie die länge).
dann kommen die eigentlichen Nutzdaten.
und am ende ein Tag, was ich noch auswerten muss
 
Zuletzt bearbeitet:
Hallo erstmal!
So wirklich eine zündende Idee oder eine passende Lösung habe ich leider erstmal nicht für dich. Aber vielleicht gibt es ja eine maximal Größe die das UDP-Packet haben kann.
Dies würde dir dann in sofern helfen, dass du dann immer ein Packet> max Größe einliest und dann wenn du die Headerdaten des Packets ausgelesen hast, das ganze zurechtstuzt. Wäre so eine Idee.

Hoffe es hilft ein bischen.

Gruß

Gora
 
Hallo,

um dir helfen zu können brauchen wir schon ein wenig mehr Informationen. Sind die Daten über mehrere UDP Pakete verteilt? Wenn ja, wie? Wie werden die Datenpakete einander zugeordnet, wie ist die logische Reihenfolge festgelegt?

Im Prinzip musst du ja nur wissen, wie viele (welche -> offsets) bytes du aus welchem UDP Paket zu einem bestimmten Datum gehören. D.h. du legst dir für jedes Datum einen entsprechenden Buffer an und emfpängst dann munter UDP Pakete und liest gemäß der Headerinformationen die entsprechende Menge bytes (in der richtigen Reihenfolge) in den entsprechenden Buffer. Ist der Buffer für ein Datum voll, so hast du für das jeweilige Datum alle Daten gelesen und kannst dieses weiterverarbeiten.

Gruß Tom
 
Zurück