Introduction à la programmation réseau en Python

Ce didacticiel présentera les sockets en Python et leur expliquera comment créer des serveurs et des clients HTTP en Python. Il couvrira également Tornado, une bibliothèque réseau Python idéale pour les longues interrogations, les WebSockets et d’autres applications nécessitant une connexion longue durée à chaque utilisateur..

Que sont les sockets??

Une socket est un lien entre deux applications pouvant communiquer l'une avec l'autre (soit localement sur une seule machine, soit à distance entre deux machines situées à des emplacements distincts)..

Fondamentalement, les sockets agissent comme un lien de communication entre deux entités, à savoir un serveur et un client. Un serveur donnera les informations demandées par un client. Par exemple, lorsque vous avez visité cette page, le navigateur a créé un socket et s'est connecté au serveur..

Le module de prise

Pour créer un socket, vous utilisez le socket.socket () fonction, et la syntaxe est aussi simple que:

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

Voici la description des arguments:

  • famille_socket: Représente la famille d'adresses (et de protocoles). Ce peut être soit AF_UNIX ou AF_INET.
  • type_socket: Représente le type de socket et peut être SOCK_STREAM ou SOCK_DGRAM.
  • protocole: Il s'agit d'un argument optionnel, dont la valeur par défaut est généralement 0.

Après avoir obtenu votre objet socket, vous pouvez créer un serveur ou un client comme vous le souhaitez en utilisant les méthodes disponibles dans le module socket..

Créer un client simple

Avant de commencer, examinons les méthodes de socket client disponibles en Python..

  • s = socket.socket (socket.AF_INET, socket.SOCK_STREAM)
  • s.connect (): Initie une connexion au serveur TCP.

Pour créer un nouveau socket, vous devez d'abord importer la méthode de socket de la classe socket.

prise d'importation

Ensuite, nous allons créer un socket de flux (TCP) comme suit:

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

le AF_INET L'argument indique que vous demandez un socket Internet Protocol (IP), plus précisément IPv4. Le deuxième argument est le type de protocole de transport SOCK_STREAM pour les sockets TCP. En outre, vous pouvez également créer un socket IPv6 en spécifiant le socket. AF_INET6 argument.

Spécifiez le serveur.

serveur = "localhost"

Spécifiez le port avec lequel vous voulez communiquer.

port = 80

Connectez le socket au port sur lequel le serveur écoute.

adresse_serveur = ((hôte, port)) stream_socket.connect (adresse_serveur) 

Il est important de noter que l'hôte et le port doivent être un tuple..

Envoyer une demande de données au serveur:

message = 'message' stream_socket.sendall (message)

Obtenez la réponse du serveur:

data = sock.recv (10) imprimer des données

Pour fermer une prise connectée, vous utilisez la méthode close:

stream_socket.close ()

Vous trouverez ci-dessous le code complet du client / serveur..

import socket socket sys # Créer une socket TCP / IP stream_socket = socket.socket (socket.AF_INET, socket.SOCK_STREAM) # Définir hôte hôte = 'localhost' # définir le port de communication port = 8080 # Connectez le socket au port où le serveur est à l'écoute adresse_serveur = ((hôte, port)) print "connection" stream_socket.connect (adresse_serveur) # Envoyer un message de données = 'message' stream_socket.sendall (message) # réponse data = stream_socket.recv (10) print data print ' socket fermé 'stream_socket.close () 

Construire un serveur simple

Voyons maintenant un simple serveur Python. Voici les méthodes de serveur de socket disponibles dans Python..

  • s = socket.socket (socket.AF_INET, socket.SOCK_STREAM)
  • s.bind (): Lie l'adresse (nom d'hôte, numéro de port) au socket.
  • s.listen (): Configure et démarre l'écouteur TCP.
  • s.accept (): Accepte la connexion client TCP.

Nous allons suivre les étapes suivantes: 

  • Créer une socket.
  • Lier le socket à un port.
  • Commencez à accepter les connexions sur le socket.

Voici le programme du serveur.

import socket import sys # Créer une socket TCP / IP sock = socket.socket (socket.AF_INET, socket.SOCK_STREAM) # Définir hôte hôte = 'localhost' # définir le port de communication port = 8080 # Lier le socket à la chaussette de port. bind ((hôte, port)) # Écouter les connexions entrantes sock.listen (1) # Attendre une impression de connexion 'en attente d'une connexion' connexion, client = sock.accept () client d'impression, 'connecté' # # Recevoir les données en petits morceaux et le retransmettre data = connection.recv (16) print 'reçu "% s"'% data if data: connection.sendall (données) else: print 'no data from', client # Ferme la connexion connection.close () 

Le serveur est maintenant prêt pour les connexions entrantes.

Maintenant, exécutez les programmes client et serveur dans des fenêtres de terminal séparées, afin qu'ils puissent communiquer entre eux.

Sortie du serveur

$ python server.py en attente d'une connexion ('127.0.0.1', 47050) connecté reçu "message" 

Sortie du client

$ python client.py socket de message de connexion fermé 

Le cadre de la tornade

Le framework Tornado est l’une des bibliothèques disponibles pour la programmation réseau en Python. Dans cette section, nous discuterons de cette bibliothèque et montrerons comment l’utiliser pour construire WebSockets..

Tornado est un framework Web Python et une bibliothèque réseau asynchrone. Tornado utilise les E / S réseau non bloquantes et peut donc évoluer vers des dizaines de milliers de connexions ouvertes. Cet attribut le rend idéal pour les longues interrogations, les WebSockets et autres applications nécessitant une connexion longue durée avec chaque utilisateur..

Créons un Tornado WebSocket simple:

import tornado.ioloop import classe tornado.web ApplicationHandler (tornado.web.RequestHandler): def get (self): self.message = message = "" "  Cadre de tornade  Bienvenue dans le framework Tornado  "" "self.write (message) if __name__ ==" __main__ ": application = tornado.web.Application ([(r" / ", ApplicationHandler),]) application.listen (5001) tornado.ioloop.IOLoop.instance ().début() 

Dans le code ci-dessus:

  • Nous définissons la classe Gestionnaire d'application qui sert de gestionnaire pour une requête et renvoie une réponse en utilisant le écrire() méthode.
  • le principale méthode est l'entrée pour le programme.
  • tornado.web.Application crée une base pour l’application Web et prend une collection de gestionnaires, par exemple ApplicationHandler.
  • L'application écoute sur le port 5000 et un client peut communiquer avec cette application à l'aide du même port..
  • tornado.ioloop.IOLoop.instance (). start () crée un thread non bloquant pour une application.

Si nous lançons l'application, nous obtiendrons le résultat indiqué dans la capture d'écran ci-dessous..

Conclusion

A présent, vous devez avoir compris les bases de la programmation de socket en Python et comment vous pouvez créer un serveur et un client simples. N'hésitez pas à expérimenter en construisant votre propre client de chat. Pour plus d'informations, visitez la documentation officielle Python.

De plus, n'hésitez pas à voir ce que nous avons disponible à la vente et à étudier dans le marché Envato, et n'hésitez pas à poser des questions et à fournir vos précieux commentaires en utilisant le flux ci-dessous.