[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