Lucrarea nr. 2 Aplicaţii de tip client Mihai IVANOVICI 6 martie 2006 Scopul acestei lucrări este de a vă familiariza cu modulul Python socket şi cu mo

Documente similare
Modulul 1 M1-2.3 Protocoale şi servicii în reţea În acest capitol ne propunem să abordăm următoarele: Protocoalele şi aplicaţiile folosite în reţelele

Microsoft Word - lab-fr_3

Damoc Alina Timofte Maria 1. Rezumat: Implementarea unui dispozitiv ce permite verificarea tempe

Microsoft PowerPoint - TDRC_II-10-TCP.ppt

Interfețe și Protocoale de Comunicații Arduino-Port Paralel Arduino. Laborator 1- Portul Paralel 1 Caracteristici generale Arduino UNO este o placă de

Microsoft Word - cap2.2.UNIX-NOS.doc

2

Packet Tracer - Configurarea ACL-urilor extinse - Scenariul 1 Topologie Tabela de Adresare R1 Echipament Interfață Adresă IP Masca de subreţea Default

Proiectarea Sistemelor Software Complexe

Example Title with Registration Microsoft® and Trademark SQL ServerTM

Microsoft PowerPoint - Curs_TPI_22_v01.ppt

Proceduri stocate Syntax: CREATE PROCEDURE <Name> type1,...] AS -- secventa de comenzi SQL GO O procedura stocata se ruleaza cu EXEC: EXEC <N

Limbaje de Programare Curs 8 – Fisiere

PHP (II)

Laborator - Configurarea Rutelor IPv4 Statice și Implicite Topologie Tabela de Adresare Echipame nt Interfață Adresă IP Masca de subreţea Default Gate

Creational design patterns

Top

Carrier Pidgeon Protocol

Laborator - Configurarea de bază DHCPv4 pe un router Topologie Tabela de Adresare Echipame nt Interfață Adresă IP Masca de subreţea Default Gateway Ob

CABINET MINISTRU

Gestionarea I/E

Laborator 9: Fire de execuţie Întocmit de: Adina Neculai Îndrumător: Asist. Drd. Gabriel Danciu 20 noiembrie 2011

1

Laborator Depanarea Rutării Inter-VLAN Topologie 2013 Cisco and/or its affiliates. All rights reserved. This document is Cisco Public. Page 1 of 8

PPSD

PowerPoint Presentation

FIŞA DISCIPLINEI 1. Date despre program 1.1 Instituţia de învăţământ superior Universitatea Babeş-Bolyai Cluj-Napoca 1.2 Facultatea Facultatea de Mate

Laborator - Depanarea configurării și plasării ACL-ului. Topologie 2013 Cisco and/or its affiliates. All rights reserved. This document is Cisco Publi

Caraivan George-Alexandru Grupa 431A Interfața driver-kernel la Linux Introducere Deși pentru unii dintre noi acest lucru poate fi o supriză, cei mai

1. Depistarea setarilor de retea necesare Primul pas pentru introducerea in retea a DVR-ului este determinarea setarilor de retea cu care lucreaza ret

Microsoft Word Sony_Ericsson_RO.doc

Ch

LUMINIŢA SCRIPCARIU

Slide 1

Politica N21 privind modulele Cookie mobile Network TwentyOne se angajează să vă protejeze pe dumneavoastră și orice date (anonime sau de altă natură)

Reţele de calculatoare

VoIP Voice Over IP

PowerPoint Presentation

Paradigme de programare

HONEYWELL AWARD

PT-9800PCN_NUG_ROM.book

ÎS CENTRUL DE TELECOMUNICAȚII SPECIALE CENTRUL DE CERTIFICARE A CHEILOR PUBLICE POLITICA de utilizare a certificatelor SSL Iunie 2013 Chişinău 2013


Laborator - Folosirea Wireshark-ului pentru Examinarea Frameurilor Ethernet Topologie Obiective Partea 1: Examinați Câmpurile Header-ului dintr-un Fra

Microsoft Word - 2 ES RO.doc

Utilizarea Internetului in Afaceri FSEGA, UBB Lect.univ.dr. Daniel Mican LABORATOR 1. Google Drive, Google Calendar, WeTr

Microsoft Word - MI_05_009_Prescriere_1.doc

Curs 10

Example Title with Registration Microsoft® and Trademark SQL ServerTM

Laborator 8: PROIECTAREA BAZELOR DE DATE SUBPROGRAME in PL/SQL (partea II - functii) Un subprogram este un bloc PL/SQL cu nume (spre deosebire de bloc

Lucrarea 10

Laborator 1 suport teoretic Mediul de dezvoltare Eclipse GLOSAR - Aplicaţie: program obţinut în urma aplicării operației BUILD asupra unui proiect (ve

Textul si imaginile din acest document sunt licentiate Attribution-NonCommercial-NoDerivs CC BY-NC-ND Codul sursa din acest document este licentiat Pu

Platformăde e-learning și curriculăe-content pentru învățământul superior tehnic Sisteme de operare 13. Planificarea proceselor

EW-7416APn v2 & EW-7415PDn Ghid de instalare Macintosh / v2.0 0

Laborator - Configurarea NAT-ului Dinamic și Static Topologie Tabela de Adresare Echipament Interfață Adresă IP Masca de subreţea Default Gateway Obie

Paradigme de Programare

Ghidul Utilizatorului GW210

Comanda si supravegherea centralelor termice de putere

Preprocesorul C Funcţii cu numǎr variabil de argumente 6 decembrie 2005 Programarea calculatoarelor 2. Curs 10 Marius Minea

Microsoft Word - CarteC.doc

PowerPoint Presentation

Raportarea serviciilor de dializă la nivel CNAS

DCP-350C DCP-353C DCP-357C DCP-560CN Ghid de Instalare Rapidă Înainte de a putea utiliza aparatul, trebuie să configuraţi hardware-ul şi apoi să insta

Microsoft PowerPoint - ARI_R_c9-10_IP_part2 [Compatibility Mode]

Lucrarea 11. IoT Internet of Things - Accesul prin Internet la obiecte sau dispozitive simple 1. Obiectivul lucrarii Lucrarea isi propune sa studieze

Carrier Pidgeon Protocol

Slide 1

Laborator 3

MF65M Ghid de utilizare rapidă ZTE CORPORATION Hi-techRoad South Nr. 55, ShenZhen, R.P.China Cod poștal:

Informație și comunicare

Kein Folientitel

CONFIGURARE SHOREWALL Autor:Marius Strâcnă Data: Versiunea: 1.1 Ce este Shorewall? Shorewall este un instrument free software firewall pent

Procesarea Imaginilor - Laborator 1: Introducere în utilizarea bibliotecii OpenCV 1 1. Introducere în utilizarea bibliotecii OpenCV 1.1. Introducere S

Cuprins

Laborator 6 - Paradigme de Programare

Laborator 7: PROIECTAREA BAZELOR DE DATE SUBPROGRAME in PL/SQL (partea I - proceduri) Un subprogram este un bloc PL/SQL cu nume (spre deosebire de blo

Lab6LCD

LABORATOR 1. Stocarea si partajarea fisierelor online cu ajutorul Dropbox, WeTransfer.com PREZENTAREA LUCRĂRII DE LABORATOR Lucrarea de laborator îşi

Reţele de calculatoare

Student: Mădălina-Maria Mitricioaei Titlul proiectului: IOT Sensor Hub Rezumat

Biomedical Wi-Fi data transmissons

Testare manuala: situatia in care o persoana initiaza fiecare test, interactioneaza cu el si interpreteaza, analizeaza si raporteaza rezultatele. Test

Ruby on Rails Pop Alexandru Pavel Razvan Calculatoare 4

MODUL RETAIL

Microsoft Word - Curs 11 - PHP.doc

GT-100IP InternetPhone [VoIP] Ghidul Utilizatorului (V1.0)

D6300 WiFi ADSL Modem Router Installation Guide Cover

Utilizarea Internetului in Afaceri FSEGA, UBB Lect.univ.dr. Daniel Mican LABORATOR 3. Achizitionarea domeniilor web si a

Manual de utilizare Set volan și pedale MG7402

Rețele de Calculatoare

CURS

Example Title with Registration Microsoft® and Trademark SQL ServerTM

Laborator - Proiectarea și Implementarea Adresării cu VLSM Topologie Obiective Partea 1: Examinați Cerințele Rețelei Partea 2: Proiectați Schema Adres

Utilizare Internet

..MINISTERUL EDUCAŢIEI NAȚIONALE ŞI CERCETARII STIINTIFICE UNIVERSITATEA DE VEST DIN TIMIȘOARA.I CENTRUL DE DEZVOLTARE ACADEMICĂ. FIŞA DISCIPLINEI (CO

Laborator 2 Incompatibilităţi/Diferenţe între C şi C++ Completări C++ Supraîncărcarea (redefinirea) numelui de funcţii În C nu este permisă existenţa

Ghid de conectare rapidă Cartela Internet Vodafone VMC R9.4 Cartela Internet Vodafone funcţionează cu aplicaţia Vodafone Mobile Connect

Transcriere:

Lucrarea nr. 2 Aplicaţii de tip client Mihai IVANOVICI 6 martie 2006 Scopul acestei lucrări este de a vă familiariza cu modulul Python socket şi cu modul de implementare al unei aplicaţii de tip client. 1 Socket Socket-ul este o extensie a sistemului I/O al sistemului de operare, care permite comunicaţia între procese ce rulează pe maşini diferite. Din punct de vedere istoric, conceptul de socket a apărut pe sistemul de operare BSD, un sistem de tip Unix. Când suportul pentru reţea a fost adăugat la sistemele de operare, acesta a fost făcut menţinând uniformitatea cu operaţiile pe fişiere şi obiecte de tip fişier (e.g., obiectele de tip pipe). Pe sistemele de tip Unix, apeluri sistem cum ar fi read(), write(), dup(), dup2() şi close() vor funcţiona pentru socket-uri, la fel ca pentru orice descriptor de fişier. Deşi socket-ul poate fi tratat la fel ca un fişier, există şi diferenţe: fişierele sunt create de apelul funcţiei open(), pe când socket-urile de apelul funcţiei socket(), şi alte apeluri sunt necesare pentru conectarea la sau activarea lor, cum ar fi send() şi recv() 2 Crearea unui socket Pentru o aplicaţie de tip client, crearea unui socket presupune două faze: (i) crearea propriu-zisă a obiectului te tip socket, şi (ii) conectarea acestuia la un server. La crearea obiectului trebuie specificate tipul comunicaţiei şi familia de protocoale. Tipul comunicaţiei poate fi: IPv4 (standardul Internet actual), IPv6 (standardul Internet viitor), IPX/SPX (NetWare) sau AFP (Apple file sharing). Pentru cele mai multe comunicaţii Internet, tipul este AF INET, corespunzând standardului IPv4. Familia de protocoale indică protocolul de transport folosit: SOCK STREAM indică folosirea protocolului de transport TCP, iar SOCK DGRAM protocolul 1

UDP. Pentru crearea unui socket, în general, se foloseşte următorul apel al funcţiei socket: s = scoket.socket( socket.af_inet, socket.sock_stream ) Pentru a conecta un socket la un server, este nevoie de un dublet format din numele serverului sau adresa sa IP, şi numărul portului. Conectarea socketului se va face astfel: s.connect( ("www.server.com", 80) ) Următorul exemplu crează un socket şi apoi va stabili o conexiune cu serverul www.google.com, pe portul 80. #Basic Connection Example - connect.py import socket print "Creating socket..." print "Connecting to remote host..." s.connect( ("www.google.com", 80) ) 2.1 Aflarea portului Pentru aflarea numărului portului asociat unui protocol, se foloseşte funcţia getsevbyname() disponibilă în biblioteca socket din Python. Această funcţie acceptă două argumente: numele serviciului şi numele protocolului. Numele serviciului poate fi, de exemplu, http, iar numele protocolului este tcp sau udp. #Basic Connection Example - connect2.py import socket print "Creating socket..." print "Looking up port number..." port = socket.getservbyname( http, tcp ) 2

print "Connecting to remote host on port %d..." % port s.connect( ("www.google.com", port) ) 2.2 Aflarea de informaţii de la un socket Rulaţi exemplul următor: #Basic Connection Example - connect3.py import socket print "Creating socket..." print "Looking up port number..." port = socket.getservbyname( http, tcp ) print "Connecting to remote host on port %d..." % port s.connect( ("www.google.com", port) ) print "Connected from", s.getsockname() print "Connected to", s.getpeername() Programul va afişa adresa IP a calculatorului pe care rulează şi numărul portului, adresa IP a serverului şi numărul portului la server. Pentru clienţi, numărul portului este alocat de sistemul de operare şi poate fi random. Prin urmare, puteşi observa diverse valori la rulări diferite ale aceluiaşi program. 3 Comunicaţia folosind socket Odată ce conexiunea a fost stabilită, aceasta poate fi folosită pentru a trimite şi primit date. Pentru aceasta Python pune la dispoziţie două posibilităţi: prin socket-uri sau obiecte de tip fişier. Socket-urile pun la dispoziţie interfeţe către apelurile sistem send(), sendto(), recv() şi recvfrom(). Obiectele de tip fişier oferă o interfaţă tradiţională prin apeluri de genul read(), write() sau readline(). Obiectele socket sunt folositoare în cazul în care comunicaţia presupune un control mai bun asupra momentelor în care se trimit sau recepţionează 3

date, sau pentru protocoale în care datele sunt manipulate în cuante de o anumită lungime. Socket-urile sunt de asemenea preferate atunci când protocolul de transport folosit este UDP. 4 Tratarea erorilor În principiu, orice funcţie poate genera o eroare: server-ul nu răspunde, conexiunea nu mai este valabilă etc. Comportamentul aplicaţiei depinde de modul în care aceste erori sunt tratate. Citiţi şi înţelegeţi modul în care au fost tratate erorile în exemplul următor. Programul primeşte 3 argumente: numele unui server la care să se conecteze, un număr de port sau nume de serviciu şi numele fişierului care se doreşte a fi primit de la server. #Error Handling Example - socketerrors.py import socket, sys host = sys.argv[ 1 ] textport = sys.argv[ 2 ] filename = sys.argv[ 3 ] print "Strange error creating socket: %s" % e #Try parsing is as a numeric port number port = int( textport ) except ValueError: #That didn t work, so it s probably a protocol name #Look it up instead port = socket.getservbyname( textport, tcp ) print "Couldn t find your port: %s" % e s.connect( (host, port) ) except socket.gaierror, e: print "Address-related error connecting to server: %s" % e 4

print "Connection error: %s" % e s.sendall( "GET %s HTTP/1.0\r\n\r\n" % filename ) print "Error sending data: %s" % e while 1: buf = s.recv( 2048 ) print "Error receiving data: %s" % s if not len( buf ): break sys.stdout.write( buf ) În exemplul de mai sus, tratarea erorilor se face prin tipărirea unui mesaj şi terminarea programului. Modulul Python socket defineşte patru tipuri de erori: socket.error - pentru erori generale de I/O şi probleme privind comunicarea, socket.gaierror - pentru erori cu privire la adresa serverului, socket.herror - pentru alte erori de adresare, şi socket.timeout - pentru tratarea cazurilor în care a expirat un anumit timer setat cu ajutorul funcţiei settimeout(). Rulaţi programul socketerrors.py şi observaţi comportamentul acestuia în următoarele situaţii: $ python2.3 socketerrors.py www.google.com 80 index.html $ python2.3 socketerrors.py www.nonexisting.server.com 80 index.html $ python2.3 socketerrors.py www.google.com port80 index.html $ python2.3 socketerrors.py www.google.com http index.html $ python2.3 socketerrors.py www.yahoo.com http nonexisting.txt 5

Un caz care poate apărea şi care nu este tratat în exemplul anterior este atunci când conexiunea cu serverul se pierde după apelul connect, înainte de a se trimite sau primi date. Prin urmare, apelurile recv() nu vor returna date, iar programul se va termina în mod normal. Este posibil ca un apel sendall() să nu fie recepţionat de server, iar clientul să nu sesizeze acest lucru. Pentru a preveni acest caz se foloseşte funcţia shutdown(), care forţează golirea bufferelor temporare şi va genera o excepţie în cazul în care a intervenit vreo eroare. #Error Handling Example with Shutdown - shutdown.py import socket, sys, time host = sys.argv[ 1 ] textport = sys.argv[ 2 ] filename = sys.argv[ 3 ] print "Strange error creating socket: %s" % e #Try parsing is as a numeric port number port = int( textport ) except ValueError: #That didn t work, so it s probably a protocol name #Look it up instead port = socket.getservbyname( textport, tcp ) print "Couldn t find your port: %s" % e s.connect( (host, port) ) except socket.gaierror, e: print "Address-related error connecting to server: %s" % e print "Connection error: %s" % e 6

print "Sleeping..." time.sleep( 10 ) print "Continuing" s.sendall( "GET %s HTTP/1.0\r\n\r\n" % filename ) print "Error sending data: %s" % e s.shutdown( 1 ) print "Error sending data (detected by shutdown): %s" % e while 1: buf = s.recv( 2048 ) print "Error receiving data: %s" % s if not len( buf ): break sys.stdout.write( buf ) Rulaţi într-un terminal serverul de la Lucrarea nr. 1 şi porniţi clientul shutdown.py. Opriţi serverul (Ctrl+C) atunci când clientul afişează Sleeping.... Observaţi comportamentul clientului. $ python2.3 shutdown.py localhost 55999 index.html Sleeping... Continuing Error sending data (detected by shutdown): (107, Transport endpoint is not connected ) 7