GNU/Linux >> Linux Esercitazione >  >> Linux

Procedura:programmazione socket in Python

Introduzione

La programmazione di rete e di comunicazione sono usi particolarmente potenti di qualsiasi linguaggio di programmazione. Al giorno d'oggi è molto più comune per i computer interfacciarsi tra loro (o con un'intera rete, come Internet) di quanto non lo sia per una macchina che agisca da sola, e sapere esattamente come avviene la comunicazione è un'abilità importante per qualsiasi programmatore. Se sei un appassionato di Python, potresti essere consapevole del fatto che Python ha diverse librerie complete progettate per semplificare la programmazione di rete.
.

Prerequisiti

  • Qualsiasi versione di Python (consulta la nostra Guida per l'installazione di Python 2.7 in Centos)
  • Conoscenza di base di Python

Prese

Una delle librerie di importazione più semplici e utili è il socket biblioteca. Consente al programmatore di definire, creare, utilizzare e distruggere le connessioni di rete note come socket .

Quindi cosa è esattamente una presa? In termini di rete, un socket è l'endpoint di una connessione, definito da un indirizzo IP e un numero di porta. Una connessione utilizza una coppia di socket:sorgente e destinazione.

I programmi normalmente utilizzano socket per consentire la comunicazione tra due computer. I socket possono essere utilizzati anche per trasferire dati tra applicazioni diverse o anche parti diverse dello stesso programma. Possiamo dimostrare come funziona un socket con due applicazioni o due parti separate di un'applicazione in esecuzione:una parte del server, che ascolta le connessioni, e una parte del client, che tenta di connettersi a un server. Quando il tuo computer richiede una pagina web, ad esempio, apre un socket, di solito legandolo alla porta 80 (per HTTP), e si connette a un server web, usando lo stesso identificatore di porta e socket. Tutte le comunicazioni correlate passano attraverso quell'endpoint. Al termine della comunicazione, il client chiude il socket e la connessione a cui è legato.

La libreria socket in Python è ben sviluppata e facile da usare. Per usare la libreria metti import socket all'inizio del tuo programma. Questo comando dà al tuo programma l'accesso a tutte le funzioni incluse della libreria socket, come socket() (crea un nuovo oggetto socket), socketpair() (crea una coppia di nuovi oggetti socket) e gethostbyname() (mappa un nome host al suo indirizzo IP), solo per citarne alcuni.
.

Sperimentazione con la libreria di socket

Per sperimentare i socket sulla nostra macchina locale, scriveremo uno script Python per creare un'applicazione server che crei un socket aperto. Quindi eseguiremo quel codice e, in un'altra finestra del terminale, telnet al nostro computer locale (su localhost) utilizzando la porta che abbiamo aperto nello script del server.

Iniziamo con uno script che chiameremo server.py . Questo programma aprirà un socket, lo legherà a una porta e un protocollo, quindi ascolterà le connessioni.

import socket # (1)  
host = '' # (2)  
port = 1234 # (3)  

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # (4)  
s.bind((host, port)) # (5)  

print 'Socket created' # (6)  
s.listen(10) # (7)  
print 'Socket listening' # (8)  

conn, addr = s.accept() # (9)  

print 'Connected with ' + addr[0] + ':' + str(addr[1]) # (10)  

Salva questo file come server.py . In una finestra del terminale (o al prompt dei comandi, se stai usando Windows), vai alla posizione del tuo file ed eseguilo.

python server.py

Lascialo in esecuzione e apri una seconda finestra del terminale. In quella finestra, avvia una connessione telnet all'host locale sulla porta 1234.

telnet localhost 1234

Una volta connesso, dovresti vedere la finestra del terminale originale stampata "Connesso con 127.0.0.1:60426" o qualcosa di simile, mentre la finestra del tuo client mostrerà brevemente "Connesso a localhost" prima che la connessione termini.
.

Cosa sta facendo il codice socket

Allora cosa sta succedendo qui? Diamo un'occhiata a ciascuna riga:

La riga (1) importa il socket libreria e lo rende disponibile per l'uso. Le righe (2) e (3) impostano le variabili per host e port , rispettivamente. Il vuoto host variabile (che è una stringa vuota racchiusa tra virgolette singole, per inciso, NON virgolette doppie) significa che l'applicazione server sarà in ascolto su tutte le interfacce disponibili, incluso localhost, che è quella che useremo per connetterci.

La riga (4) crea il socket stesso, utilizzando due parametri. Il primo parametro, AF_INET , significa che stiamo utilizzando indirizzi IPv4 (al contrario di indirizzi IPv6). Il secondo parametro, SOCK_STREAM , significa che questo socket utilizzerà pacchetti TCP (il traffico UDP utilizza il tipo SOCK_DGRAM e funziona in modo leggermente diverso, ma questo va oltre lo scopo di questo articolo). La riga (5) collega il socket che abbiamo creato al (host, port) tupla.

La riga (7) dice al programma di ascoltare le connessioni al socket che abbiamo associato alla riga (5). Il 10 parametro indica che il server accetterà fino a 10 connessioni prima di rifiutare un client.

La riga (9) assegna variabili alla connessione una volta che il server accetta una connessione. La riga (10) stampa l'indirizzo IP e il numero di porta del client che ha effettuato la connessione con il server.
.

Mantenere il socket aperto

Quando abbiamo testato questo codice, abbiamo visto che il server ha chiuso immediatamente la connessione, il che non è particolarmente utile. Per poter vedere i dati trasferiti avanti e indietro sulla connessione, aggiungeremo quattro righe di codice al nostro server.py programma.

data = conn.recv(1024) # 11  
conn.sendall(data) # 12  
conn.close() # 13  
s.close() # 14  

Di nuovo, se esegui questo codice in una finestra di terminale e poi ti connetti (da un altro terminale) con telnet localhost 1234 , ti connetterai a localhost, ma questa volta la connessione rimarrà aperta. Digita una parola nella finestra di telnet e poi premi Return; la parola verrà ripetuta sullo stesso schermo, quindi la connessione verrà chiusa.

Nella riga (11), i data La variabile memorizza i dati ricevuti tramite la connessione.

La riga (12) rimanda i dati al client tramite la connessione, in altre parole facendo eco.

Infine, le righe (13) e (14) esercitano un po' di pulizia chiudendo la connessione e distruggendo il socket:non è mai una cattiva idea, specialmente quando si codifica un'applicazione basata su socket che verrà rilasciata in natura.
.

Conclusione

Questo script è un esempio molto semplice di come creare una connessione di rete usando il socket di Python modulo, comunicare attraverso la connessione, quindi chiuderla di nuovo. Mentre un'applicazione completa sarà molto più complicata, la struttura di comunicazione di base, e la teoria alla base, rimane la stessa.

Ci auguriamo che questo tutorial ti sia piaciuto e che tu abbia imparato abbastanza per iniziare a lavorare con i socket in Python. Assicurati di ricontrollare per ulteriori tutorial e per controllare le nostre affidabili soluzioni di hosting VPS.
.
.


Linux
  1. Come installare Python su Linux

  2. Come installare NumPy

  3. Come aggiornare Python a 3.9

  4. Come installare Python 3 su Ubuntu 18.04 o 20.04

  5. Come installare Python 3 su Windows 10

Come installare Python 3.8 su Debian 10

Come controllare la versione di Python

Come installare Python 3.9 su Debian 11

Come installare Python 3.11 su Ubuntu 20.04

Come installare Python 3.9 su Debian 11

Come eseguire uno script Python in PHP