Dynamische Länge eines UDP Datenpakte einlesen

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
thonix
User
Beiträge: 47
Registriert: Samstag 12. August 2006, 00:06

Dynamische Länge eines UDP Datenpakte einlesen

Beitragvon thonix » Sonntag 27. Januar 2008, 18:28

Hallo zusammen,

ich brauche einen Deamon der Daten von einem Client via UDP empfängt.

Das Paket enthält eine variierende Anzahl an Datensätzen die zu beginn des des Pakets bekannt gemacht werden. Ein Beispiel:

| Anzahl Der Datensätze [2 byte integer] (z.B. 2) | Datensatz 1 [4 byte integer] | Datensatz 2 [4 byte integer] |


Wenn ich nun mit socket.recv(2) 2 Byte auslese ist der Rest des Paketes weg ....

Das Problem ist das Datenpaket eine unbekannte/variable Länge hat. Somit kann ich nicht sagen bufferlen ist = 1024, denn so würde ich (wie auch bei den 2 Byte) die restlichen Daten nach 1024 Byte verlieren.

Hat jemand eine einfache Ahnung wie eine solche Anforderung sich in Python abbilden lässt ?

Vielen Dank

Thonix
Benutzeravatar
veers
User
Beiträge: 1219
Registriert: Mittwoch 28. Februar 2007, 20:01
Wohnort: Zürich (CH)
Kontaktdaten:

Beitragvon veers » Sonntag 27. Januar 2008, 20:23

Du machst einfach jeweils recv(maximalgrösse) ;)
My Website - 29a.ch
"If privacy is outlawed, only outlaws will have privacy." - Phil Zimmermann
thonix
User
Beiträge: 47
Registriert: Samstag 12. August 2006, 00:06

Beitragvon thonix » Sonntag 27. Januar 2008, 20:52

Was mich wundert ist das ein nicht abgerufener buffer einfach gelöscht wird ...

Die bufferlen recht Groß zu machen habe ich mir auch schon überlegt - und wäre wohl der Notnagel. Aberin der Theorie könnte das Datenpaket Unendlich groß sein ...

Vielleicht gibt es da was eleganteres.

thonix
Benutzeravatar
veers
User
Beiträge: 1219
Registriert: Mittwoch 28. Februar 2007, 20:01
Wohnort: Zürich (CH)
Kontaktdaten:

Beitragvon veers » Sonntag 27. Januar 2008, 21:07

thonix hat geschrieben:Die bufferlen recht Groß zu machen habe ich mir auch schon überlegt - und wäre wohl der Notnagel. Aberin der Theorie könnte das Datenpaket Unendlich groß sein ...
In der Praxis wird jedoch UDP/IP verwendet was das ganze auf 65507 Bytes limitiert. So habe ich das zumindest verstanden.
My Website - 29a.ch

"If privacy is outlawed, only outlaws will have privacy." - Phil Zimmermann

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder