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 -
|
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: