Introduzione alla programmazione di rete in Python

Questo tutorial fornirà un'introduzione ai socket in Python e su come utilizzare il modulo socket per creare server e client HTTP in Python. Troverà inoltre Tornado, una libreria di rete Python ideale per lunghi sondaggi, WebSocket e altre applicazioni che richiedono una connessione a lunga durata per ogni utente.

Cosa sono le prese?

Un socket è un collegamento tra due applicazioni che possono comunicare tra loro (localmente su una singola macchina o in remoto tra due macchine in posizioni separate).

Fondamentalmente, i socket fungono da collegamento di comunicazione tra due entità, vale a dire un server e un client. Un server fornirà informazioni richieste da un cliente. Ad esempio, quando hai visitato questa pagina, il browser ha creato un socket e connesso al server.

Il modulo socket

Per creare un socket, usi il socket.socket () funzione, e la sintassi è semplice come:

import socket s = socket.socket (socket_family, socket_type, protocol = 0)

Ecco la descrizione degli argomenti:

  • socket_family: Rappresenta la famiglia indirizzo (e protocollo). Può essere AF_UNIX o AF_INET.
  • socket_type: Rappresenta il tipo di socket e può essere SOCK_STREAM o SOCK_DGRAM.
  • protocollo: Questo è un argomento facoltativo e di solito è impostato su 0.

Dopo aver ottenuto l'oggetto socket, è possibile creare un server o un client come desiderato utilizzando i metodi disponibili nel modulo socket.

Crea un semplice client

Prima di iniziare, diamo un'occhiata ai metodi del socket client disponibili in Python.

  • s = socket.socket (socket.AF_INET, socket.SOCK_STREAM)
  • s.connect (): Avvia una connessione al server TCP.

Per creare un nuovo socket, devi prima importare il metodo socket della classe socket.

zoccolo di importazione

Successivamente, creeremo un socket di streaming (TCP) come segue:

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

Il AF_INET argomento indica che stai richiedendo un socket IP (Internet Protocol), in particolare IPv4. Il secondo argomento è il tipo di protocollo di trasporto SOCK_STREAM per socket TCP. Inoltre, è anche possibile creare un socket IPv6 specificando il socket AF_INET6 discussione.

Specificare il server.

server = "localhost"

Specifica la porta con cui vogliamo comunicare.

porta = 80

Collegare il socket alla porta in cui il server è in ascolto.

server_address = ((host, porta)) stream_socket.connect (server_address) 

È importante notare che l'host e la porta devono essere una tupla.

Invia una richiesta di dati al server:

messaggio = 'messaggio' stream_socket.sendall (messaggio)

Ottieni la risposta dal server:

data = sock.recv (10) stampa i dati

Per chiudere un socket connesso, utilizzare il metodo close:

stream_socket.close ()

Di seguito è riportato il codice completo per il client / server.

importa socket importa sys # Crea un socket TCP / IP stream_socket = socket.socket (socket.AF_INET, socket.SOCK_STREAM) # Definisci host host = 'localhost' # definisce la porta di comunicazione port = 8080 # Connetti il ​​socket alla porta dove server sta ascoltando server_address = ((host, porta)) stampa "connessione" stream_socket.connect (indirizzo_server) # Invia messaggio dati = 'messaggio' stream_socket.sendall (messaggio) # response data = stream_socket.recv (10) stampa dati di stampa ' socket chiuso 'stream_socket.close () 

Costruisci un semplice server

Ora diamo un'occhiata a un semplice server Python. I seguenti sono i metodi del server socket disponibili in Python.

  • s = socket.socket (socket.AF_INET, socket.SOCK_STREAM)
  • s.bind (): Associa indirizzo (nome host, numero di porta) al socket.
  • s.listen (): Imposta e avvia il listener TCP.
  • s.accept (): Accetta la connessione client TCP.

Seguiremo i seguenti passi: 

  • Crea un socket.
  • Associare il socket a una porta.
  • Inizia ad accettare le connessioni sul socket.

Ecco il programma server.

import sys import sys # Crea un socket TCP / IP sock = socket.socket (socket.AF_INET, socket.SOCK_STREAM) # Definisci host host = 'localhost' # definisce la porta di comunicazione port = 8080 # Bind il socket al port sock. bind ((host, porta)) # Ascolta le connessioni in entrata sock.listen (1) # Attendi una connessione stampa 'in attesa di una connessione', client = sock.accept () print client, 'connected' # Ricevi i dati in piccoli blocchi e ritrasmettalo data = connection.recv (16) stampa 'ricevuto "% s"'% dati se dati: connection.sendall (dati) else: stampa 'no data from', client # Chiude la connessione connection.close () 

Il server è ora pronto per le connessioni in entrata.

Ora esegui i programmi client e server in finestre di terminale separate, in modo che possano comunicare tra loro.

Uscita del server

$ python server.py in attesa di una connessione ("127.0.0.1", 47050) connesso "messaggio" ricevuto 

Uscita client

$ python client.py socket del messaggio di connessione chiuso 

Il quadro di Tornado

Il framework Tornado è una delle librerie disponibili per la programmazione di rete in Python. In questa sezione, discuteremo di questa libreria e mostreremo come usarla per costruire WebSockets.

Tornado è un framework web Python e una libreria di rete asincrona. Tornado utilizza l'I / O di rete non bloccante e quindi è in grado di ridimensionare a decine di migliaia di connessioni aperte. Questo tratto lo rende ideale per il polling lungo, WebSocket e altre applicazioni che richiedono una connessione a lunga durata per ciascun utente.

Creiamo un semplice WebSocket Tornado:

import tornado.ioloop import tornado.web class ApplicationHandler (tornado.web.RequestHandler): def get (self): self.message = message = "" "  Quadro di Tornado  Benvenuti nel framework Tornado  "" "self.write (messaggio) se __name__ ==" __main__ ": application = tornado.web.Application ([(r" / ", ApplicationHandler),]) application.listen (5001) tornado.ioloop.IOLoop.instance ().inizio() 

Nel codice sopra:

  • Definiamo la classe ApplicationHandler che funge da gestore per una richiesta e restituisce una risposta utilizzando il comando Scrivi() metodo.
  • Il principale metodo è la voce per il programma.
  • tornado.web.Application crea una base per l'applicazione Web e accetta una raccolta di gestori, ad esempio ApplicationHandler.
  • L'applicazione è in ascolto sulla porta 5000 e un client può comunicare con questa applicazione utilizzando la stessa porta.
  • tornado.ioloop.IOLoop.instance (). start () crea un thread non bloccante per un'applicazione.

Se eseguiamo l'applicazione, otterremo il risultato come mostrato nello screenshot qui sotto.

Conclusione

Ormai devi aver compreso le basi della programmazione dei socket in Python e come puoi costruire un semplice server e client. Sentiti libero di sperimentare costruendo il tuo client di chat. Per ulteriori informazioni, visita i documenti Python ufficiali.

Inoltre, non esitate a vedere ciò che abbiamo a disposizione per la vendita e per studiare nel mercato Envato, e non esitate a fare domande e fornire il vostro prezioso feedback utilizzando il feed qui sotto.