[python] socket + udp + vytváření paketů

Jakub Vojáček jakohv na seznam.cz
Úterý Únor 21 19:19:40 CET 2012


Dobrý den,

mám za úkol naprogramovat UDP klienta. TCP/IP klienta jsem pomocí 
socketů naprogramoval bez problémů, ale na UDP jsem se zaseknul, protože 
mám přesně definováno, jak má vypadat paket, který posílám.

Pokud bych neměl definován tvar paketu, tak bych použil

s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM )
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.sendto(data, host, port))

, ale jelikož je přesně definována velikost a struktura paketu, tak 
tento způsob nemohu použít.

Formát je definován následovně:
- 4B jsou rezervovány na identifikátor spojení
- 2B jsou rezervovány na sekvenční číslo
- 2B jsou rezervovány na číslo potvrzení
- 1B je rezervován na příznak
- 0-256B je rezervováno na data

Abych řekl pravdu, vůbec jsem nevěděl, jak začít. Nakonec jsem se 
pokusil použít modul struct a přenáše data zabalena pomoci toho modulu.

Použil jsem tedy funkci struct.pack()

data = struct.pack("!IHHB256s", 0, 0, 0, 1, "1")
s.sendto(data, (host, port))

Jenomže tento způsob také nefunguje, protože pokud pošlu takto zabalenou 
zprávu referenčnímu serveru, tak nedostanu odpověď - tudíž server 
nepřečetl paket správně.

Prosím Vás tedy o nějaký nápad, jak dál postupovat a jestli je např. 
použití modulu struct vhodné.

Děkuji za každou radu

Jakub
------------- další část ---------------
HTML příloha byla odstraněna...
URL: <http://www.py.cz/pipermail/python/attachments/20120221/a08bab7a/attachment.html>


Další informace o konferenci Python