Stáhnout prezentaci
Prezentace se nahrává, počkejte prosím
ZveřejnilDenis Špringl
1
Síťové programování Informační technologie - praxe SPŠE V úžlabině Jan Klepal, Mgr. Radka Müllerová Verze 2
2
Obsah Knihovny protokolů httplib httplib smtplib smtplibSoketSelectObjektyThreading
3
Knihovny protokolů Připravené knihovny pro komunikaci určitým protokolem Vhodné pro hromadné zpracování nebo automatizaci komunikace (dohledové systémy, exportní rozhraní, B2B atd.) Velice jednoduchá implementace bez hlubší znalosti komunikačního protokolu (volání funkcí/metod) Nejčastěji používané knihovny v pythonu httplib – HTTP protokol httplib – HTTP protokol ftplib – FTP protokol ftplib – FTP protokol smtplib – SMTP protokol smtplib – SMTP protokol xmlrpclib – XML RPC xmlrpclib – XML RPC
4
httplib import httplib conn = httplib.HTTPConnection('www.cnb.cz') conn.request('GET', '/www.cnb.cz/cz/financni_trhy/devizovy_trh/kurzy_devizoveho_trhu/denni_k urz.txt') response = conn.getresponse() if response.status == 200: for line in response.read().split('\n'): data = line.split('|') if len(data) == 5 and data[3] == 'EUR': print "Kurz EUR: %s" % data[4] else: print "Chyba komunikace: %s" % response.reason conn.close()
5
smtplib import smtplib kolegove = [‘pepa@uzlabina.cz’, ‘franta@uzlabina.cz’, ‘honza@uzlabina.cz’] s = smtplib.connect(‘smtp.uzlabina.cz’) msg = “““ From: klepal@uzlabina.czklepal@uzlabina.cz To: %s Subject: Pozvanka na poradu Dobrý den, porada bude příští týden v úterý od 10:00 ve sborovně. Jan Klepal ””” for kolega in kolegove: s.sendmail(‘klepal@uzlabina.cz’, kolega, msg % kolega) s.quit()
6
Objekty Objekt obsahuje data i funkce dohromady Třída (class) definuje chování objektu atributy – proměnné atributy – proměnné metody – funkce metody – funkce Samotné objekty jsou instance tříd Dědičnost (inheritence) objektů umožňuje, aby jedna třída byla rozšířena atributy a metodami objektu jiného
7
Objekty import time class Clovek: def __init__(self): self.narozen = time.time() self.jmeno = None def pokrti(self, jmeno): self.jmeno = jmeno def vek(self): print "%s je stary %i sekund" % (self.jmeno, int(time.time() - self.narozen)) lemming1 = Clovek() lemming2 = Clovek() lemming1.pokrti(„Pepa“) lemming1.vek() lemming1.jmeno definice objektu člověk (třída) konstruktor metoda atribut Vytvoření instance objektu člověk volání metody pokřti přístup k atributu jmeno
8
Socket Socket umožňuje jednoduše implementovat komunikaci pomocí IP protokolu Většina OS využívá Berkeley Sockets API Socket umožňuje operačnímu systému přiřadit IP komunikační kanál k určité aplikaci pomocí: Protokolu (TCP, UDP, případně přímo IP) Protokolu (TCP, UDP, případně přímo IP) Lokální IP adresy Lokální IP adresy Lokálního portu Lokálního portu Vzdálené IP adresy Vzdálené IP adresy Vzdáleného portu Vzdáleného portu V socketové komunikaci se rozlišuje: Server – očekává spojení na určitém portu Server – očekává spojení na určitém portu Client – pčipojuje se na port, na kterém „poslouchá“ server Client – pčipojuje se na port, na kterém „poslouchá“ server
9
Socket - server import socket, time HOST = '' PORT = 55555 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.bind((HOST, PORT)) s.listen(1) while 1: conn, addr = s.accept() print 'Connection from', addr conn.send(str(time.localtime()) + '\r\n') conn.close()
10
Socket - klient import socket HOST = '127.0.0.1' PORT = 55555 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect((HOST, PORT)) data = s.recv(1024) s.close() print 'Právě je', repr(data)
11
Select Socketové funkce send() a recv() jsou blokující. Pro detekci, zda je soket připraven odesílat resp. přijímat data se používá funkce select() rd, wr, er = select(readers, writers, errors, timeout) rd, wr, er = select(readers, writers, errors, timeout) readers – list socketů pro test připravenosti na čtení writers – list socketů pro test připravenosti na zápis errors – list socketů pro test zda jsou v chybném stavu timeout – počet sekund pro test připravenosti rd – list připravených socketů pro čtení wr – list připravených socketů pro zápis er – list socketů v chybném stavu
12
Select - příklad import socket, select HOST = '' PORT = 55555 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.bind((HOST, PORT)) s.listen(1) while 1: conn, addr = s.accept() print 'Connection from', addr conn.send('Login: ') rd, wr, er = select.select([conn], [], [], 5) if rd: user = conn.recv(1024) print 'User: ', user conn.send('OK\r\n') else: print 'Timeout' conn.send('Sorry... timeout\r\n') conn.close()
13
Threading Threading umožňuje, aby část programu byla vykonávána souběžně s během hlavního cyklu programu Jednotlivé thready mohou sdílet data (proměnné) i funkce/metody Při použití threadingu se stává běh programu asynchronní Pro synchronizaci přístupu k souborům, síťovým spojením a paměti (proměnným) se používají semafory nebo zámky (lock) Pro synchronizaci přístupu k souborům, síťovým spojením a paměti (proměnným) se používají semafory nebo zámky (lock) Bez použití zámků není např. garantováno, že během čtení z Bez použití zámků není např. garantováno, že během čtení z Threading je efektivnější než forking (zálěží na implementaci v programovacím jazyku, OS a případné HW podpoře)
14
Threading - příklad import threading, time class Stopky(threading.Thread): def __init__(self, nazev, cas): self.nazev = nazev self.cas = cas threading.Thread.__init__(self) def run(self): while self.cas > 0: print self.nazev, self.cas self.cas -= 1 time.sleep(1) print "Konec threadu", self.nazev s1 = Stopky('stopky A', 7) s2 = Stopky('stopky B', 4) s1.start() s2.start() time.sleep(10) print "Konec hlavniho programu"
Podobné prezentace
© 2024 SlidePlayer.cz Inc.
All rights reserved.