paint-brush
Un guide essentiel de la programmation de sockets en Python : bibliothèques client, serveur et pair à pairpar@pubnub
4,574 lectures
4,574 lectures

Un guide essentiel de la programmation de sockets en Python : bibliothèques client, serveur et pair à pair

par PubNub5m2023/03/06
Read on Terminal Reader

Trop long; Pour lire

Dans ce didacticiel, vous apprendrez à échanger des données entre un client et un serveur à l'aide de la programmation socket Python et de l'API Socket. Le code source utilisé dans ce didacticiel se trouve dans le [référentiel GitHub] : https://github.com/PubNubDevelopers/python-socket-demo.
featured image - Un guide essentiel de la programmation de sockets en Python : bibliothèques client, serveur et pair à pair
PubNub HackerNoon profile picture
0-item

Dans ce didacticiel, vous apprendrez à échanger des données entre un client et un serveur à l'aide de la programmation socket Python et de l'API Socket. Plus tard, ce didacticiel abordera l'échange de données directement entre deux ou plusieurs clients Python à l'aide d'un fournisseur hébergé. Le code source utilisé dans ce didacticiel se trouve dans le référentiel GitHub .


La programmation de socket connecte deux sockets (un socket client et un socket serveur) et leur permet de communiquer de manière bidirectionnelle en temps réel. Les connexions directes par socket peuvent profiter à toutes les applications en temps réel puisque les données peuvent être envoyées ou reçues à tout moment.

Configuration de l'environnement

Vous aurez besoin d'une version stable de Python version 3.x installée sur votre machine. Si vous êtes un utilisateur Windows, vous avez la possibilité d'ajouter Python à votre PATH.


Vous aurez également besoin d'un éditeur de code pour suivre ce tutoriel.


Visual Studio Code est un éditeur de code open source et gratuit populaire qui prend en charge de nombreux langages et frameworks, y compris Python.


VSCode prend également en charge les extensions pour Python pour aider à l'achèvement et au débogage du code.

Construire et exécuter une application de socket Python

Construisons une application de socket simple en utilisant Python. Python fournit une classe de socket native (module de socket), de sorte que les développeurs n'ont pas besoin de dépendre de bibliothèques externes. Commencez par configurer le client et le serveur du socket Python :


Pile de sockets Python


Créez le fichier client.py dans le répertoire du projet. Pour utiliser les sockets, importez la bibliothèque de sockets Python et créez un nouvel objet socket qui se connecte à une adresse IP spécifiée (dans ce cas, localhost sur le numéro de port 8080, mais vous pouvez sélectionner n'importe quelle adresse ipv4).


Créez une nouvelle connexion au serveur socket, envoyez les données au serveur TCP et fermez la connexion socket.


Votre fichier client.py devrait ressembler à ceci :


 import socket client = socket.socket(socket.AF_INET, socket.SOCK_STREAM) client.connect(('0.0.0.0', 8080)) client.send("I am CLIENT\n".encode()) from_server = client.recv(4096) client.close() print (from_server.decode())


Vous aurez besoin d'un serveur de socket pour écouter les connexions entrantes et les messages de votre client.


Créez le fichier server.py et ajoutez le contenu suivant :


 import socket serv = socket.socket(socket.AF_INET, socket.SOCK_STREAM) serv.bind(('0.0.0.0', 8080)) serv.listen(5) while True: conn, addr = serv.accept() from_client = '' while True: data = conn.recv(4096) if not data: break from_client += data.decode('utf8') print (from_client) conn.send("I am SERVER\n".encode()) conn.close() print ('client disconnected and shutdown')


Server.py lie l'objet socket au nom d'hôte (localhost) sur le port 8080 et écoute en permanence les nouvelles connexions client. Lorsqu'un client se connecte à cette adresse, le serveur accepte la connexion et lit toutes les données.


Une fois que les données sont lues avec succès à partir du client, le serveur fournit une réponse de données, à quel point le client met fin à la connexion.


Pour tester cela vous-même, ouvrez deux fenêtres de terminal simultanément. Dans une fenêtre, exécutez :


 python3 server.py


Dans la deuxième fenêtre, exécutez :


 python3 client.py


Notez que le serveur continue de fonctionner et établira une nouvelle connexion chaque fois que vous exécuterez le client et ajouterez une nouvelle sortie.


Le client enverra la chaîne "Je suis CLIENT" au serveur et attendra une réponse. Le serveur lira le message du client, le sortira sur le terminal et renverra une réponse au client.


Exemple de socket Python

Programmation de sockets en Python avec PubNub

Jusqu'à présent, ce didacticiel a couvert l'échange de messages entre un serveur et un client, mais que se passe-t-il si vous avez besoin de communiquer directement entre les clients Python ?


L'envoi de données directement entre deux appareils clients ou plus est délicat, car vous rencontrez de nombreuses considérations de mise à l'échelle et de sécurité à mesure que votre nombre d'appareils augmente.


Une architecture client-serveur est utilisée pour modérer et gérer votre communication client-client. Si vous n'avez pas de serveur Web ou si vous vous inquiétez de la mise à l'échelle de votre serveur pour répondre aux exigences de votre application, vous devez opter pour une solution de communication hébergée en temps réel telle que PubNub .


Les SDK multiplateformes de PubNub, y compris Python , peuvent identifier les utilisateurs et envoyer des messages à des canaux spécifiques, que seuls les clients abonnés recevront.

Programmation de socket Python client à client

Alors, comment l'application simple présentée précédemment serait-elle écrite avec PubNub pour échanger des messages directement entre deux clients ? Il est essentiel de comprendre que bien que PubNub utilise l'architecture "publier" et "s'abonner" (pub/sub) pour envoyer et recevoir des messages bidirectionnels entre les points de terminaison, il utilise toujours des sockets en arrière-plan. PubNub vous offre les avantages de la communication par socket sans vous soucier des détails de la programmation réseau Python et en maintenant une connexion permanente entre vos clients, quel que soit le système d'exploitation.


Pour intégrer PubNub dans le projet, installez le package PubNub avec pip dans le terminal ; cela vous permettra d'utiliser le SDK PubNub Python et de communiquer avec l'infrastructure PubNub.


 pip3 install 'pubnub>=7.1.0'


Vous devrez créer deux clients pour vous connecter et communiquer sur le réseau PubNub. Créez un fichier pn_client_1.py et ajoutez le code suivant :


 from pubnub.callbacks import SubscribeCallback from pubnub.enums import PNStatusCategory from pubnub.pnconfiguration import PNConfiguration from pubnub.pubnub import PubNub import time import os pnconfig = PNConfiguration() userId = os.path.basename(__file__) pnconfig.publish_key = 'demo' pnconfig.subscribe_key = 'demo' pnconfig.user_id = userId pnconfig.ssl = True pubnub = PubNub(pnconfig) def my_publish_callback(envelope, status): # Check whether request successfully completed or not if not status.is_error(): pass class MySubscribeCallback(SubscribeCallback): def presence(self, pubnub, presence): pass def status(self, pubnub, status): pass def message(self, pubnub, message): if message.publisher == userId : return print ("from device " + message.publisher + ": " + message.message) pubnub.add_listener(MySubscribeCallback()) pubnub.subscribe().channels("chan-1").execute() ## publish a message while True: msg = input("") if msg == 'exit': os._exit(1) pubnub.publish().channel("chan-1").message(str(msg)).pn_async(my_publish_callback)


Créez le fichier pn_client_2.py et ajoutez le même code que vous avez utilisé pour pn_client_1.py

Le code ci-dessus utilise des clés "démo", mais vous pouvez obtenir gratuitement vos clés PubNub personnalisées.


Exécutez simultanément pn_client_1.py et pn_client_2.py dans deux fenêtres de terminal différentes


 python3 pn_client_1.py


 python3 pn_client_2.py


Chaque client initialise sa connexion au réseau PubNub et s'abonne pour recevoir de nouveaux messages chaque fois qu'ils sont publiés sur le canal chan-1 . Vous pouvez considérer cela comme l'envoi de données via un socket TCP en Python ; dans les coulisses, PubNub crée et gère le socket pour vous et achemine votre message à tous les clients qui l'écoutent. Une fois que le client distant reçoit le message, le message reçu s'affiche sur la ligne de commande.


Exemple Python PubNub


Et c'est tout ce qu'il y a à faire ! Pour plus d'informations sur le développement avec PubNub, consultez notre gamme de tutoriels . Vous pouvez également consulter la visite interactive en direct de PubNub pour comprendre comment la plate-forme offre une interactivité en temps réel aux applications. PubNub prend en charge la communication de datagrammes TCP et UDP, ainsi que Linux, Unix et Windows.


Également publié ici : https://www.pubnub.com/blog/socket-programming-in-python-client-server-p2p/