[python] socket + udp + vytváření paketů
Jakub Vojáček
jakohv na seznam.cz
Úterý Únor 21 23:17:37 CET 2012
Dne 21.2.2012 22:02, Jirka Vejrazka napsal(a):
> a) server neakceptuje UDP pakety, kde je identifikator spojeni a/nebo
> sekvencni cislo nastavene na
Pokud jsem dobře pochopil zadání tak:
"Iniciátorem spojení je vždy klient.
Klient pošle první datagram s příznakem SYN a s identifikátorem spojení,
sekvenčním číslem a číslem potvrzení nastaveným na nulu. Datová část
musí obsahovat právě 1 byte s kódem příkazu:"
> b) mas sitovy problem s odpovedi na UDP paket (viz muj predchozi mail).
Kód příkazu je dle specifikace 01h, což do 1byte myslím nenarvu. Ale
pokud se podívám do referenční ukázky, tak oni tam při inicializiaci
spojení posílají jako data "01" a ani když takto upravím struct.pack,
tak od serveru nedostávám žádnou odpověd. Podle specifikace v zadání
bych právě neměl dostat myslím žádnou odpověď, pokud přesně nestrefím
první volání (přece jenom je to robotovi upadla anténa a musel se
reebotovat bez nejakých komponent :-))
> Fantastické! Co to máte za učitele? To je nádhera. Učí stejně dobře jak
> píše zadání?
Jedná se o předmět Počítačové sítě a dělí se v podstatě na tři části
- přednášky - historie sítí, tenhle kabel vypadá takhle, stíněnej takhle
- semináře - konfigurace cisco routerů
- prosemináře - práce s adresami - výpočet masek, nat, ...
, přičemž každou část učí někdo jiný. Přednášející je uspávač hadů, ale
ten kdo učí prosemináře se zdá, že tomu fakt rozumí a asi i píše i ty
zadání. Takže ta programovací část předmětu je v podstatě takové
samostudium. Nicméně je to, alespon pro mě, ta nejzábavnější část celého
předmětu.
> Tak pošli celý kód.
#-*- coding: utf-8 -*-
import socket
import re
import time
import struct
import threading
class Listener(threading.Thread):
def __init__(self, ip='baryk.fit.cvut.cz', port=4000):
threading.Thread.__init__(self)
self.ip = ip
self.port = port
def run(self):
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM )
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
sock.connect((self.ip, self.port))
while 1:
data, from_ip = sock.recvfrom(1)
print "data", data
x = Listener()
x.start()
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM )
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
data = struct.pack("!IHHB256s", 0, 0, 0, 1, "01")
s.bind(("",0))
s.sendto(data, ("baryk.fit.cvut.cz", 4000))
Děkuji
Jakub
------------- další část ---------------
HTML příloha byla odstraněna...
URL: <http://www.py.cz/pipermail/python/attachments/20120221/cccece14/attachment.html>
Další informace o konferenci Python