Python Socket Programming - Prima di iniziare con Python Socket Programming, spero che tu abbia buone basi in Python. Se conosci anche Django, sarebbe ancora più facile da capire. No, la programmazione dei socket non è correlata a Django, ma le terminologie nella programmazione dei socket Python e Django sono quasi le stesse sebbene siano due categorie diverse. Quindi, per cominciare, che cos'è esattamente la programmazione socket Python? La programmazione di Python Socket non è presente solo in Python, ma anche in Java e in quasi tutti gli altri linguaggi di programmazione. Ma nel caso di Python, la programmazione dei socket è in realtà molto facile da capire. Programmazione Python Socket significa programmazione in rete. Include i codici relativi lato client e server Python Socket. Ma questa definizione è buona quanto un libro in cui si afferma che la programmazione C viene utilizzata per sviluppare software. E nah, non sono qui per quello. Sono qui per assicurarti di avere una comprensione più profonda delle basi della programmazione dei socket Python, prima di iniziare a scrivere i tuoi moduli socket. Quindi, cominciamo e vediamo come funziona il socket sul lato client o sul lato server Python Socket.

Che cos'è la programmazione socket Python?

Se hai imparato la programmazione in C, l'apprendimento della programmazione dei socket in Python sarebbe molto semplice poiché sono quasi gli stessi. Per renderlo più semplice, la programmazione dei socket python è solo un pezzo di codice su come i computer in una rete comunicano tra loro. E questo non si esaurisce solo con una rete basata su LAN, ma supporta anche reti basate su WAN, MAN e intranet. Usiamo persino le prese nella nostra vita quotidiana. Non capisco? Lascia che ti faccia un semplice esempio. Quando vuoi connetterti, diciamo Facebook.com, digita semplicemente la stessa cosa nella barra degli URL. Quindi, questa connessione che hai appena creato non è solo creata dalle cose DNS. Tutto questo è configurato attraverso la programmazione socket python. I socket decidono come comunicare due reti. Qualsiasi comunicazione che passa attraverso una rete, può essere un video, connessioni VOIP o solo testo; tutto passa attraverso una presa. Ora che sappiamo quali sono i socket, sviluppiamo il nostro socket in Python.

Fonte immagine: pixabay.com

Tipi di programmazione socket Python

Ora ci sono un sacco di prese là fuori. Ma non parleremo di tutti loro dal momento che non posso coprirli tutti qui. È possibile creare un socket UDP, un socket TCP o persino un socket della porta e ce ne sono molti altri se continuo. Ma oggi guarderei di più ai socket TCP e UDP poiché sono i più basilari e possono essere estremamente utili come punto di partenza per iniziare con la programmazione di Python Socket.

  • Programmazione socket UDP

User Datagram Protocol o il suo comunemente noto come UDP è un protocollo alternativo a TCP che trasferisce i pacchetti da un host a un altro. A differenza del TCP (protocollo di controllo della trasmissione), UDP è un protocollo senza connessione ed è orientato al flusso. Ciò significa che il server UDP acquisirà solo i pacchetti in arrivo da tutto l'host senza identificare una connessione di origine affidabile. Per fare ciò utilizzeremo la funzione socket.socket. Un semplice socket UDP viene creato nel modo seguente in Python:

import socket #importing module socket from python library # Ora dobbiamo creare AF_INET e sock dgram socketss = socket.socket (socket.AF_INET, socket.SOCK_DGRAM) stampa "Creazione socket riuscita"

Sì. Questo è tutto e abbiamo creato un semplice socket UDP qui in Python. Python Socket La programmazione o persino la creazione di un socket semplice non è scienza missilistica. Tuttavia, il grosso problema risiede nella codifica del server UDP e del client. Poiché i socket UDP sono senza connessione, le comunicazioni vengono avviate con le funzioni di invio e ricezione dei socket. Queste funzioni non richiedono di collegarsi tra loro. Possono effettivamente inviare e ricevere pacchetti da qualsiasi fonte casuale. Ecco come viene creato un server UDP:

import socketport = 2924s = socket.socket (socket.AF_INET, socket.SOCK_DGRAM) s.bind ((“”, port)) stampa “Richiesta di connettività alla porta sulla macchina”, porta

mentre 1:

dati, indirizzo = s.recvfrom (1024)

stampa dati

Questo potrebbe non sembrare molto, ma è così che viene effettivamente creato. Si può usare qualsiasi porta qui. Ne ho appena scelto uno casuale come 2924. Il server UDP ha bisogno di una porta aperta per inviare e ricevere connessioni in entrata. Non è possibile ascoltare la porta o accettare connessioni o richieste. Succede semplicemente senza alcuna autenticazione. Prova a eseguire il server sopra su un terminale e guarda come funziona.

Questo è solo un semplice server UDP che abbiamo creato. Rendiamolo un po 'più interessante e anche un po' più complicato:

"'Questo è un semplice server socket UDP”' importa socketimport sys

HOST = “” # Uno può provare tutte le interfacce disponibili qui

PORT = 2924 # Qualsiasi porta casuale che non viene utilizzata per impostazione predefinita su Windows o distribuzioni Linux

# Codifica del socket UDP

provare :

s = socket.socket (socket.AF_INET, socket.SOCK_DGRAM)

stampa "Socket inizializzato" '

eccetto socket.error, msg:

stampa “Creazione socket non riuscita. Si è verificato il seguente errore: ”+ str (msg (0)) + 'Messaggio' + msg (1)

sys.exit ()

# Ora dobbiamo associare questo socket all'host e alla porta di cui sopra

provare:

s.bind ((HOST, PORT))

eccetto socket.error, msg:

stampa “Binding Socket fallito. Il seguente errore ha interrotto l'associazione: ”+ str (msg (0)) + 'Messaggio' + msg (1)

sys.exit ()

stampa "Collegamento socket completato"

#Mantenere la connessione stabilita

mentre 1:

# acquisisce dati dal client utilizzando dati e indirizzi variabili

d = s.recvfrom (1024)

data = d (0)

indirizzo = d (1)

in caso contrario dati:

rompere

risposta = "OK …" + dati

invio (risposta, indirizzo)

stampa 'Token message (' + address (0) + ':' + str (address (1)) + ') -' + data.strip ()

s.close ()

Esegui il programma sopra e avvierai un server UDP sulla porta 2924. Complimenti, hai creato con successo un Socket in Python. E assicurati di notare che, un server UDP può gestire un sacco di client a differenza del server TCP, il motivo principale è che non esiste una connettività fissa in un server UDP come nel caso di un server TCP.

Corsi consigliati

  • Corso di certificazione in debug Ruby
  • Corso MySQL PHP
  • Corso di certificazione di programmazione VB.NET
  • Formazione completa ITIL Foundation
  • Programmazione client UDP

Ora che abbiamo creato con successo un server UDP, abbiamo bisogno di un client per stabilire una connessione adeguata ad esso in modo che ne conosca il funzionamento. Quindi, consente di creare un client UDP adeguato in Python. Questo client si connetterà al nostro server UDP che abbiamo creato sopra:

"'Creazione di un client UDP semplice con socket" import import socketimport sys

# Creazione di un socket UDP

provare:

s = socket.socket (socket.AF_INET, socket.SOCK_DGRAM)

eccetto socket.error:

stampa "Creazione socket non riuscita"

sys.exit ()

host = '127.0.0.1'; #Puoi anche provare a utilizzare localhost in questo IP, entrambi sono uguali.

porta = 2924;

mentre (1):

msg = raw_input ('Digita un messaggio da inviare al server:')

provare :

# Ora dobbiamo impostare le stringhe

s.sendto (msg, (host, porta))

# Ora dobbiamo ricevere dati e indirizzi dal client utilizzando dati e indirizzo

d = s.recvfrom (1024)

risposta = d (0)

indirizzo = d (1)

print 'La risposta dal server è:' + rispondi

eccetto socket.error, msg:

print 'Compare il seguente errore:' + str (msg (0)) + 'Messaggio' + msg (1)

sys.exit ()

Sì. La creazione di un client UDP nella programmazione di Python Socket è molto più semplice della creazione di un server UDP. Ma è così che va. Non penso che avrei bisogno di spiegare nulla dal codice sopra, dato che ho già menzionato tutte le cose richieste nei commenti del tag #. Assicurati solo che l'indirizzo IP e la porta che hai inserito siano corretti e che il tuo firewall non blocchi la connessione, altrimenti si verificherà sempre un errore, qualunque cosa accada.

  • Programmazione socket TCP

Ora che abbiamo imparato come creare un client e un server UDP, diamo un'occhiata alla programmazione dei socket TCP. Useremo la stessa funzione socket.socket per creare un socket TCP qui.

import socket # Importando il socket del modulo dalle librerie python # crea un AF_INET e stream sockets = socket.socket (socket.AF_INET, socket.SOCK_STREAM) stampa 'Socket Creation Successful'

Qui, AF_INET viene utilizzato per la connessione dell'indirizzo Ipv4 e il flusso di calzino è un protocollo orientato al TCP. Questo è un semplice socket TCP che abbiamo creato. Ora creeremo una versione avanzata della stessa cosa. Faremo delle eccezioni anche qui, allo stesso modo in cui l'abbiamo lanciato durante la creazione di server e client UDP in modo che, nel caso in cui la connettività fallisca, sapremo dove si trova il programma reale. Socket.error verrà utilizzato per gestire tutti questi errori simili a quelli della programmazione UDP.

Quindi ora consente di creare un socket con la gestione degli errori sopra e connettersi all'host facebook.com. Ecco come deve essere fatto:

import socket #importing the socket moduleimport systry: s = socket.socket (socket.AF_INET, socket.SOCK_STREAM)

eccetto socket.error, msg:

stampa "Creazione socket non riuscita. Si è verificato il seguente errore: '+ str (msg (0)) +', Messaggio di errore: '+ msg (1)

sys.exit ();

stampa "Creazione socket riuscita"

host = "www.facebook.com"

porta = 2924

provare:

remote_ip = socket.gethostbyname (host)

eccetto socket.gaierror:

print 'Nome host errato. Uscita …'

sys.exit ()

stampa "+ host + indirizzo IP" è "+ remote_ip

s.connect ((remote_ip, port))

stampa 'Socket Connected to' + host + 'su ip' + remote_ip

Ora questo è sufficiente se dobbiamo solo avviare una connessione. Ma questo non è il nostro obiettivo. Intendiamo creare una connessione in cui sia possibile inviare e ricevere dati anche su entrambi i lati. Siamo in grado di inviare dati utilizzando la funzione sendall. Quindi ecco come va:

import socket #importing the socket moduleimport systry: s = socket.socket (socket.AF_INET, socket.SOCK_STREAM)

eccetto socket.error, msg:

stampa "Creazione socket non riuscita. Si è verificato il seguente errore: '+ str (msg (0)) +', Messaggio di errore: '+ msg (1)

sys.exit ();

stampa "Creazione socket riuscita"

host = "www.facebook.com"

porta = 2924

provare:

remote_ip = socket.gethostbyname (host)

eccetto socket.gaierror:

print 'Nome host errato. Uscita …'

sys.exit ()

stampa "+ host + indirizzo IP" è "+ remote_ip

s.connect ((remote_ip, port))

stampa 'Socket Connected to' + host + 'su ip' + remote_ip

#trasferimento dei dati utilizzando la funzione sendall

messaggio = "GET / HTTP / 1.1 \ r \ n \ r \ n"

provare :

s.sendall (messaggio)

eccetto socket.error:

#Invio fallito

stampa "Errore di trasmissione"

sys.exit ()

stampa "Stato messaggio: inviato"

Ora che abbiamo creato una connessione corretta e possiamo anche inviare i dati, diamo un'occhiata a come potremmo ricevere i dati del tutto. Le cose stanno così:

import socket #importing the socket moduleimport systry: s = socket.socket (socket.AF_INET, socket.SOCK_STREAM)

eccetto socket.error, msg:

stampa "Creazione socket non riuscita. Si è verificato il seguente errore: '+ str (msg (0)) +', Messaggio di errore: '+ msg (1)

sys.exit ();

stampa "Creazione socket riuscita"

host = "www.facebook.com"

porta = 2924

provare:

remote_ip = socket.gethostbyname (host)

eccetto socket.gaierror:

print 'Nome host errato. Uscita …'

sys.exit ()

stampa "+ host + indirizzo IP" è "+ remote_ip

s.connect ((remote_ip, port))

stampa 'Socket Connected to' + host + 'su ip' + remote_ip

#trasferimento dei dati utilizzando la funzione sendall

messaggio = "GET / HTTP / 1.1 \ r \ n \ r \ n"

provare :

s.sendall (messaggio)

eccetto socket.error:

#Invio fallito

stampa "Errore di trasmissione"

sys.exit ()

stampa "Stato messaggio: inviato"

# Ora per ricevere i dati, utilizziamo la funzione recv per raggiungerli

reply = s.recv (4096)

stampa risposta

L'ultima cosa è che dobbiamo chiudere il socket che potremmo farlo con il seguente codice:

s.close ()

E infine, la parte vincolante. Possiamo usare la funzione bind per unire socket con indirizzi IP e porte.

import socketimport sysHOST = ”# Questo è lo stesso che abbiamo fatto nel protocollo UDPPORT = 2924 # port per accedere ai dati.

s = socket.socket (socket.AF_INET, socket.SOCK_STREAM)

stampa "Creazione socket riuscita"

provare:

s.bind ((HOST, PORT))

eccetto socket.error, msg:

print 'Rilegatura fallita. Si è verificato il seguente errore '+ str (msg (0)) +' Messaggio '+ msg (1)

sys.exit ()

stampa "Socket Binding riuscito"

Ora, dobbiamo ascoltare le chiamate in entrata per le connessioni in entrata se abbiamo bisogno che il server si connetta. Questo può essere fatto con il seguente semplice comando:

s.listen (10) stampa 'Listener avviato'

E infine, dobbiamo creare un socket per accettare queste connessioni:

import socketimport sysHOST = "PORT = 2924

s = socket.socket (socket.AF_INET, socket.SOCK_STREAM)

stampa "Creazione socket riuscita"

provare:

s.bind ((HOST, PORT))

eccetto socket.error, msg:

print 'Rilegatura fallita. Si è verificato l'errore seguente '+ str (msg (0)) +' Messaggio '+ msg (1)

sys.exit ()

stampa "Collegamento socket riuscito"

s.listen (10)

stampa 'Listener iniziato'

#Accettazione delle connessioni

conn, addr = s.accept ()

# Fornire informazioni sul client connesso

print 'Connessione stabilita con' + addr (0) + ':' + str (addr (1))

In realtà c'è molto di più in questo. Possiamo anche scrivere codici per gestori e altre cose. Ma penso che per ora sarebbe così. Assicurati di avere queste basi corrette, dopodiché le parti rimanenti sono solo un gioco da ragazzi per imparare.

Prima fonte di immagini: pixabay.com

Articoli Correlati:-

Ecco alcuni articoli che ti aiuteranno a ottenere maggiori dettagli sulla programmazione dei socket Python, quindi basta passare attraverso il link.

  1. 25 domande e risposte più interessanti su Python
  2. Carriere in Python
  3. Quali sono i vantaggi e i limiti dell'utilizzo di Python?
  4. Differenza importante tra prestazioni Python e Ruby
  5. Introduzione alla programmazione socket in PHP
  6. Programmazione socket in Java | Metodo classe socket

Categoria: