Prima di iniziare con la programmazione di rete in python ho deciso di fare una piccola introduzione sull’argomento, ovviamente questo articolo non sarà completo in quanto l’argomento è molto vasto infatti a tal proposito esistono interi libri ed esami universitari su quest’argomento ma per il nostro scopo il seguente articolo sarà più che sufficiente.
Una rete di calcolatori è un sistema che permette la condivisione di dati informativi e risorse tra diversi calcolatori. All’interno di una rete di calcolatori la comunicazione avviene tramite scambio di informazioni (messaggi),per comunicare sono necessari:
Un calane fisico:
Cavo telefonico, fibra ottica, onde radio, ecc
Un linguaggio comune: protocollo di comunicazione
Insieme di regole formalmente descritte, definite al fine di favorire la comunicazione tra una o più entità.
Quindi sostanzialmente l’obbiettivo principale delle reti è scambiare informazioni tra i computer, queste info vengono trasportate dai pacchetti, I pacchetti sono dei flussi di bit , che vengono spediti come segnali elettrici questi segnali vengono poi interpretati come bit(0/1) che compongono l’informazione vera e propria.Tutti i pacchetti hanno la seguente struttura:
L’header ha una struttura che dipende dal protocollo, ciò consente all’host che riceve il pacchetto possa interpretare correttamente il payload e gestire la comunicazione.
il payload è l’informazione vera e propria. Potrebbe essere qualcosa come una parte di un messaggio email o il contenuto di un file durante un download.
Modello ISO/OSI
Il modello ISO/OSI è formato da sette livelli ed è usato come modello di riferimento durante l’implementazione dei protocolli in produzione. Il funzionamento è il seguente:
L’intero pacchetto del protocollo superiore (header e payload) diventa il payload del livello inferiore questo meccanismo è chiamato incapsulamento.
Networking per le applicazioni
Le applicazioni più diffuse per utilizzare le funzionalità di rete si appoggiano direttamente sui protocolli TCP o UDP della suite di protocolli Internet.
Il protocollo TCP (Transfer Control Protocol) è un protocollo di alto livello orientato alla connessione e che esegue controlli sugli errori, un destinatario “TCP” è identificato da un indirizzo IP e da una porta di destinazione.
Socket (TCP)
L’astrazione principale per la programmazione di rete è il Socket:
– Identifica le risorse che permettono di stabilire un canale di comunicazione con un altro processo (eventualmente su un’altra macchina).
– Tutto quello che viene trasmesso sono pacchetti TCP.
Ora che abbiamo fatto questa piccola introduzione sporchiamoci le mani con un pò di codice:
Esempio Server TCP
# coding=utf-8 import socket import threading #Il nostro server sarà in ascolto sul seguente indirizzo e porta indirizzo="0.0.0.0" porta = 9999 #Creiamo una socket, il parametro AF_INET indica che useremo un indirizzo IPv4 # SOCK_STREAM indica che vogliamo creare un socket TCP server =socket.socket(socket.AF_INET,socket.SOCK_STREAM) server.bind((indirizzo,porta))#stiamo in ascolto server.listen(3)#3 connessioni per volta #creiamo una funzione per la gestione del client def GestioneClient(client_sock): #salviamo la richiesta del client nella variabile request request = client_sock.recv(1024) print request #inviamo un messaggio al client client_sock.send("Messaggio ricevuto") #chiuduamo la connession client_sock.close() while True: #Assegnamo il socket del client alla var client e i dettagli della connessione alla var addr client,addr=server.accept() print "Connessione accettata da parte %s %d" % (addr[0],addr[1]) #Avviamo un thread per gestire i dati in arrivo da parte del client cl=threading.Thread(target=GestioneClient,args=(client,)) cl.start()
Esempio Client TCP
# coding=utf-8 import socket indirizzo="0.0.0.0" porta = 9999 #creo una socket sc =socket.socket(socket.AF_INET,socket.SOCK_STREAM) sc.connect((indirizzo,porta)) #invio i dati sc.send("Hello world") #ricevo i dati dal server risposta=sc.recv(4096) print risposta
Esercizi
- Il client prende una stringa di testo da input e lo invia al client
- il sever continua a mantenere la connessione finchè non riceve la stringa fine
Altri tutorial sul linguaggio python sono reperibili presso il seguente link. Mentre per domande e richieste potete contattarci sulla nostra pagina di facebook