Python utiliser un socket pour communiquer

Mise en place d’un serveur d’écoute socket et d’un client socket pour communiquer entre deux scripts pythons distinct.

En avançant dans la découverte du langage python qui est à la fois simple et puissant, la mise en place de script de plus en plus complexe peut nécessité de faire communiquer ensemble deux scripts dont l’un peut avoir besoin d’information provenant de l’autre.

Python schéma de communication entre script
Python schéma de communication entre script

Nous fonctionnerons avec un script qui fera office de serveur et un qui fera office de client.

Le script client enverra une donnée (en l’occurence une simple phrase) au script serveur qui sera préalablement lancé et qui écoute ce qui se passe.

Nous allons utiliser un port dans notre cas le 15555.

Matériels nécessaires

Pour la mise en place du mini-réseau, nous n’avons besoin que d’un Raspberry, l’exécution sur plusieurs machines n’est pas très complqué, il suffira de modifier l’adresse à laquelle le client envoie les données.

Ecriture des script Python pour utiliser le module socket

Nous allons utiliser un module qui est déjà incluse dans python, je ferai les tests avec la version python 2.7, je n’ai pas testé avec python 3 mais cela ne devrait pas être très différents (au moins une différence sur la fonction print)

Coté serveur

Commençons par le script client qui écoute ce qui se passe sur son port (dans notre cas le 15555), dans un terminal, créez serveur.py et y écrire :

#!/usr/bin/env python
#-*- coding:utf-8 -*-
import socket

socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
socket.bind(('',15555))

while True:
        socket.listen(5)
        client, adresse = socket.accept()
        print("{} connecter".format(adresse))

        reponse = client.recv(4096)
        if reponse != "":
                print(reponse)

print("Connexion fermée")
client.close()
socket.close()

Au final, rien de compliqué avant la boucle while, nous configurons notre socket.

Dans la boucle while, nous écoutons le socket qui a été configuré.

On accepte la connexion, et si il y a un retour du client, on l’affiche.

Puis on ferme la connexion du client et la la connexion au socket.

Coté client

Maintenant côté client, nous allons écrire dans le fichier client.py :

#!/usr/bin/env python
# coding: utf-8

import socket

hote = "localhost"
port = 15555

socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
socket.connect((hote, port))
print ("Connection on {}".format(port))

socket.send(u"Salut, je te contacte du client")

print("Close")
socket.close()

Nous déterminons l’hôte, il s’agira de l’adresse à qui on veut se connecter ainsi que le port.

Vu que je veux envoyer un message à un script en cours d’exécution sur la même machine, je mets localhost, dans le cas d’une machine sur le réseau, mettre l’adresse ip de la machine serveur.

Nous configurons le socket et nous nous connectons à la machine.

On envoie notre message.

Puis on ferme la connexion.

Utilisation du socket

Dans un terminal, commencez à exécuter le script serveur :

python ./serveur.py #si vous vous trouvez dans le même dossier, sinon indiquez le chemin absolu

Puis ouvrez un second terminal et exécutez le script client, regardez ce qui se passe sur le terminal où tourne le script serveur.

python ./client.py #si vous vous trouvez dans le même dossier, sinon indiquez le chemin absolu

Résultat

Python résultat du test socket
Python résultat du test socket

Voilà, amusez-vous bien et n’hésitez pas à partager et à commenter

Laisser un commentaire