Python - 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 accesso di livello superiore a specifici protocolli di rete a livello di applicazione, come FTP, HTTP e così via.

Questo capitolo fornisce informazioni sui concetti più famosi 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 comunicazioni 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 -

  • Una stringa, che può essere un nome host, un indirizzo a quattro punti o un indirizzo IPV6 in notazione con due punti (e possibilmente punto)

  • Una stringa "<broadcast>", che specifica un indirizzo INADDR_BROADCAST.

  • Una stringa di lunghezza zero, che specifica INADDR_ANY o

  • Un numero intero, interpretato come un indirizzo binario nell'ordine dei byte dell'host.

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.

Adesso chiama 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/python           # This is server.py file

import socket               # Import socket module

s = socket.socket()         # Create a socket object
host = socket.gethostname() # Get local machine name
port = 12345                # Reserve a port for your service.
s.bind((host, port))        # Bind to the port

s.listen(5)                 # Now wait for client connection.
while True:
   c, addr = s.accept()     # Establish connection with client.
   print 'Got connection from', addr
   c.send('Thank you for connecting')
   c.close()                # Close the connection

Un cliente semplice

Scriviamo un programma client molto semplice che apra una connessione a una data porta 12345 e un determinato 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.

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/python           # This is client.py file

import socket               # Import socket module

s = socket.socket()         # Create a socket object
host = socket.gethostname() # Get local machine name
port = 12345                # Reserve a port for your service.

s.connect((host, port))
print s.recv(1024)
s.close()                     # Close the socket when done

Ora esegui questo server.py in background e poi esegui sopra client.py 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

Ciò produrrebbe il seguente risultato:

Got connection from ('127.0.0.1', 48437)
Thank you for connecting

Moduli Internet Python

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 lavorare con i protocolli FTP, SMTP, POP e IMAP.

Ulteriori letture

Questo è stato un rapido avvio con Socket Programming. È un argomento vasto. Si consiglia di passare attraverso il seguente collegamento per trovare maggiori dettagli: