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
_______________________________________________
Python mailing list
Python@py.cz
http://www.py.cz/mailman/listinfo/python

Odpovedet emailem