Python 3 - Programmazione di rete
Python fornisce due livelli di accesso ai servizi di rete. A un livello basso, è possibile accedere al supporto socket di base nel sistema operativo sottostante, che consente di implementare client e server per protocolli orientati alla connessione e senza connessione.
Python dispone anche di librerie che forniscono un accesso di livello superiore a specifici protocolli di rete a livello di applicazione, come FTP, HTTP e così via.
Questo capitolo fornisce una comprensione del concetto più famoso di Networking: Socket Programming.
Cosa sono i socket?
I socket sono gli endpoint di un canale di comunicazione bidirezionale. I socket possono comunicare all'interno di un processo, tra processi sulla stessa macchina o tra processi su continenti diversi.
I socket possono essere implementati su diversi tipi di canali: socket di dominio Unix, TCP, UDP e così via. La libreria socket fornisce classi specifiche per la gestione dei trasporti comuni, nonché un'interfaccia generica per la gestione del resto.
Le prese hanno il loro vocabolario -
Sr.No. | Termine e descrizione |
---|---|
1 | domain La famiglia di protocolli utilizzata come meccanismo di trasporto. Questi valori sono costanti come AF_INET, PF_INET, PF_UNIX, PF_X25 e così via. |
2 | type Il tipo di comunicazione tra i due endpoint, in genere SOCK_STREAM per i protocolli orientati alla connessione e SOCK_DGRAM per i protocolli senza connessione. |
3 | protocol Tipicamente zero, può essere utilizzato per identificare una variante di un protocollo all'interno di un dominio e tipo. |
4 | hostname L'identificatore di un'interfaccia di rete -
|
5 | port Ogni server ascolta i client che chiamano su una o più porte. Una porta può essere un numero di porta Fixnum, una stringa contenente un numero di porta o il nome di un servizio. |
Il modulo socket
Per creare un socket, è necessario utilizzare la funzione socket.socket () disponibile nel modulo socket, che ha la sintassi generale -
s = socket.socket (socket_family, socket_type, protocol = 0)
Ecco la descrizione dei parametri:
socket_family - Questo è AF_UNIX o AF_INET, come spiegato in precedenza.
socket_type - Questo è SOCK_STREAM o SOCK_DGRAM.
protocol - Questo di solito viene omesso, il valore predefinito è 0.
Dopo aver ottenuto l' oggetto socket , è possibile utilizzare le funzioni richieste per creare il programma client o server. Di seguito è riportato l'elenco delle funzioni richieste:
Metodi socket server
Sr.No. | Metodo e descrizione |
---|---|
1 | s.bind() Questo metodo associa l'indirizzo (nome host, coppia di numeri di porta) al socket. |
2 | s.listen() Questo metodo imposta e avvia il listener TCP. |
3 | s.accept() Questo accetta passivamente la connessione client TCP, in attesa dell'arrivo della connessione (blocco). |
Metodi socket client
Sr.No. | Metodo e descrizione |
---|---|
1 | s.connect() Questo metodo avvia attivamente la connessione al server TCP. |
Metodi socket generali
Sr.No. | Metodo e descrizione |
---|---|
1 | s.recv() Questo metodo riceve il messaggio TCP |
2 | s.send() Questo metodo trasmette il messaggio TCP |
3 | s.recvfrom() Questo metodo riceve il messaggio UDP |
4 | s.sendto() Questo metodo trasmette il messaggio UDP |
5 | s.close() Questo metodo chiude il socket |
6 | socket.gethostname() Restituisce il nome host. |
Un semplice server
Per scrivere server Internet, utilizziamo il socketfunzione disponibile nel modulo socket per creare un oggetto socket. Un oggetto socket viene quindi utilizzato per chiamare altre funzioni per configurare un server socket.
Ora chiama il bind(hostname, port)funzione per specificare una porta per il servizio sull'host specificato.
Quindi, chiama il metodo di accettazione dell'oggetto restituito. Questo metodo attende che un client si connetta alla porta specificata, quindi restituisce un oggetto connessione che rappresenta la connessione a quel client.
#!/usr/bin/python3 # This is server.py file
import socket
# create a socket object
serversocket = socket.socket(
socket.AF_INET, socket.SOCK_STREAM)
# get local machine name
host = socket.gethostname()
port = 9999
# bind to the port
serversocket.bind((host, port))
# queue up to 5 requests
serversocket.listen(5)
while True:
# establish a connection
clientsocket,addr = serversocket.accept()
print("Got a connection from %s" % str(addr))
msg = 'Thank you for connecting'+ "\r\n"
clientsocket.send(msg.encode('ascii'))
clientsocket.close()
Un cliente semplice
Scriviamo un programma client molto semplice che apra una connessione a una data porta 12345 e un dato host. È molto semplice creare un client socket utilizzando la funzione del modulo socket di Python .
Il socket.connect(hosname, port )apre una connessione TCP al nome host sulla porta . Una volta aperto un socket, puoi leggere da esso come qualsiasi oggetto IO. Quando hai finito, ricordati di chiuderlo, come faresti per chiudere un file.
Esempio
Il codice seguente è un client molto semplice che si connette a un determinato host e porta, legge tutti i dati disponibili dal socket e quindi esce:
#!/usr/bin/python3 # This is client.py file
import socket
# create a socket object
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# get local machine name
host = socket.gethostname()
port = 9999
# connection to hostname on the port.
s.connect((host, port))
# Receive no more than 1024 bytes
msg = s.recv(1024)
s.close()
print (msg.decode('ascii'))
Ora esegui questo server.py in background e quindi esegui il client.py sopra per vedere il risultato.
# Following would start a server in background.
$ python server.py &
# Once server is started run client as follows:
$ python client.py
Produzione
Ciò produrrebbe il seguente risultato:
on server terminal
Got a connection from ('192.168.1.10', 3747)
On client terminal
Thank you for connecting
Moduli Internet Python
Di seguito viene fornito un elenco di alcuni moduli importanti nella programmazione di rete / Internet Python:
Protocollo | Funzione comune | Porta n | Modulo Python |
---|---|---|---|
HTTP | pagine web | 80 | httplib, urllib, xmlrpclib |
NNTP | Notizie Usenet | 119 | nntplib |
FTP | Trasferimenti di file | 20 | ftplib, urllib |
SMTP | Invio di e-mail | 25 | smtplib |
POP3 | Recupero email | 110 | poplib |
IMAP4 | Recupero email | 143 | imaplib |
Telnet | Righe di comando | 23 | telnetlib |
Gopher | Trasferimenti di documenti | 70 | gopherlib, urllib |
Controlla tutte le librerie sopra menzionate per funzionare con i protocolli FTP, SMTP, POP e IMAP.
Ulteriori letture
Questo è stato un rapido inizio con la programmazione socket. È un argomento vasto. Si consiglia di passare attraverso il seguente collegamento per trovare maggiori dettagli: