Python Networking

Python Networking
Python è un linguaggio di alto livello appositamente progettato per semplificare la vita degli sviluppatori. D'altra parte, la programmazione di rete può essere un compito noioso e complicato in altri linguaggi di programmazione, ma è semplice e facile in un linguaggio di programmazione Python. Consente all'utente di scrivere script in grado di automatizzare la configurazione di rete complessa. In questo articolo, vedremo come eseguire la programmazione di rete utilizzando Python.

Come viene utilizzato Python nel networking?

Il linguaggio di programmazione di Python svolge un ruolo vitale nella programmazione di rete. Python ha una libreria standard integrata che fornisce supporto completo per la codifica e la decodifica dei dati, i protocolli di rete e tutti gli altri concetti di networking. Scrivere i codici per la programmazione di rete in Python è molto più semplice che in C ++ o Java. Il linguaggio di programmazione Python fornisce due livelli di accesso al servizio di rete: accesso di basso livello e di alto livello. L'accesso di basso livello offre il supporto di base del sistema operativo. Mentre l'accesso di alto livello consente i protocolli di implementazione come FTP. Http, ecc.

Questo articolo ti aiuterà con una comprensione di base del concetto più famoso di networking in Python che è la programmazione di socket.

Cosa sono le prese?

Le prese forniscono un canale di comunicazione bidirezionale tra due endpoint. Processi su altre macchine, processi sulla stessa macchina e socket riesce a comunicare con tutti. Possono essere implementati su canali diversi come UDP, TCP, prese di dominio UNIX, ecc. La libreria socket in Python fornisce classi diverse per la gestione del trasferimento di dati comuni o un'interfaccia generica per la gestione del resto. Le prese utilizzano vari tipi di protocolli per determinare la connessione da porta a porta tra server e client. Questi protocolli vengono utilizzati per FTP, SMTP, e -mail, indirizzo IP, DNS, ecc. Il vocabolario delle prese è diverso. Dai un'occhiata alla seguente illustrazione:

Termine Descrizione
Dominio Insieme di protocolli utilizzati come meccanismo di trasporto.
Tipo Definisce il tipo di comunicazione tra le prese.
Protocollo Determina il tipo di protocollo all'interno del tipo e del dominio.
Porta Un punto di ascolto attraverso il quale i server ascoltano il client chiama. È costituito dal nome di un servizio, una stringa contenente il numero di porta e un numero di porta Fixnum.
Nome host Identifica un'interfaccia di rete ed è costituito dalle seguenti cose:

Una stringa "" che identifica l'indirizzo di trasmissione.

Una stringa a lunghezza zero.

Una stringa che contiene il nome host, un indirizzo a doppio quarta o un indirizzo IPv6.

Un intero che definisce l'indirizzo binario nell'ordine del byte host.

Cos'è la programmazione di socket?

La programmazione socket collega due nodi su una rete di comunicazione. Un nodo è l'ascoltatore che è comunemente noto come server e l'altro raggiunge il server che è comunemente noto come client. Per la programmazione della presa in Python, il modulo Socket deve essere incluso.

Esploriamo alcuni esempi per imparare a implementare la programmazione di rete in Python.

Esempio 1:

In questo esempio, impareremo la sintassi del modulo socket e come importarlo in un programma Python. Innanzitutto, importiamo il modulo socket nel programma Python utilizzando l'istruzione "Import Socket". Quindi, possiamo usare le funzioni dei moduli socket. Ecco la sintassi del modulo Socket ():

Società di importazione
SocketModule = Socket.Socket (presa.Af_inet, socket.Sock_Stream)
Stampa (SocketModule)

Ora eseguiamo la dichiarazione per vedere cosa restituisce:

Ecco il seguente output:

Esempio 2:

Ora, iniziamo a creare come creare un server semplice e un client semplice e vedere come comunicano tra loro.

Ecco la codifica lato server:

Innanzitutto, importa una presa e quindi crea un oggetto socket:

Importazione di importazione come s
SocketModule = Socket.PRESA()

Ottieni il nome della macchina chiamando l'istruzione gethostname ():

hostname = socket.gethostname ()

Fornire il numero di porta che si desidera che il server effettui una connessione tra server e client:

PortNum = 12345

Ora, lega l'host con la porta per avviare una connessione:

S.bind ((nome host, portnum))

Il prossimo passo è attendere la connessione client:

SocketModule.Ascolta (5)

Infine, stabilisci una connessione con il cliente:

mentre è vero:
A, ADRS = S.accettare()
Stampa ('Connessione ricevuta da', ADRS)
UN.Invia (b'thanks per la connessione ')
UN.vicino()

Quanto segue è la codifica sul lato client:

Per avviare una connessione, il modulo socket deve essere importato sul lato client così come è stato importato sul lato server:

Importazione di importazione come s
SocketModule = Socket.PRESA()

Seguire lo stesso processo, ottenere il nome della macchina locale e prenotare la porta riservata dal server per stabilire una connessione:

hostname = socket.gethostname ()
PortNum = 12345

Ora collega l'host con la porta e fai una connessione tra di loro:

SocketModule.Connetti (('127.0.0.1 ', portnum))
Stampa (SocketModule.recv (1024))
S.vicino()

Una volta terminato la codifica sul lato client e sul server, avviare sia il server che il client in background per vedere i risultati:

Dopo una connessione riuscita, vedrai il seguente output:

Esempio 3:

Vediamo un altro esempio per avere una comprensione più chiara su come il server si connette con il client e come il server ascolta il client.

Ecco la codifica lato server:

Per la codifica lato server, seguire lo stesso processo. Importa il socket, crea un modulo socket, riserva il numero di porta, lega l'host e la porta e ascolta il client. Se si può osservare, la condizione "if" viene aggiunta al ciclo per verificare una condizione particolare. Vedi il seguente codice:

Società di importazione
PortNum = 60
IPadrs = '127.0.0.1 '
Buffer = 30
SocketModule = Socket.Socket (presa.Af_inet, socket.Sock_Stream)
SocketModule.bind ((iPadrs, portnum))
SocketModule.Ascolta (1)
Conn, ADRS = SocketModule.accettare()
print ('L'indirizzo della connessione è:', ADRS)
mentre è vero:
Data = Conn.recv (buffer)
Se non dati:
rottura
Stampa ("I dati ricevuti sono:", dati)
con.invia i dati)
con.vicino()

Quanto segue è la codifica sul lato client:

Il processo di effettuare una connessione sul lato client è di nuovo, lo stesso. Importa il socket, crea un modulo socket, riserva il numero di porta e collega la porta con l'host:

Società di importazione
PortNum = 5006
IPadrs = '127.0.0.1 '
Buffer = 1024
PrintMessage = "Ciao! Sono un messaggio dal cliente."
SocketModule = Socket.Socket (presa.Af_inet, socket.Sock_Stream)
SocketModule.Connect ((iPadrs, PortNum))
SocketModule.Invia (PrintMessage)
Data = SocketModule.recv (buffer)
SocketModule.vicino

Ora, osserva che il client invia un messaggio al server: "Ciao! Sono un messaggio dal cliente ". Questo messaggio viene ricevuto dal server e viene stampato.

Dopo la connessione riuscita tra il server e il client, vedrai il seguente output:

Conclusione

Questa è una panoramica di base della programmazione socket in Python e un rapido inizio con l'implementazione. Tuttavia, è un argomento vasto e contiene molti dettagli con una codifica complessa. Una volta che ti metterai pratico con questi semplici programmi, sarai in grado di entrare nella profondità della programmazione della presa.