Socket Python – Serveur avec plusieurs clients

image_pdfimage_print

Dans le tutoriel précédent, nous avons parlé du serveur TCP en Python qui accepte et réponde aux demandes d’un seul client TCP. Maintenant, nous allons voir comment créer un serveur Python multithread qui peut fonctionner avec plusieurs clients TCP.
 
 

Créer un serveur multithread en Python

Un serveur multithread utilise les modules principaux suivants pour gérer plusieurs connexions client.

  • Module « threading » de Python.
  • ThreadingMixIn de SocketServer.

La classe ThreadingMixIn permet au serveur Python de créer de nouveaux threads pour prendre en charge chaque nouvelle connexion. Il permet également au programme d’exécuter les threads de manière asynchrone.

Nous allons créer les trois programmes suivantes:

  • Serveur.py
  • ClientA.py
  • ClientB.py

 

Serveur.py
import socket 
from threading import Thread 
from socketserver import ThreadingMixIn 

class myThread(Thread): 
    def __init__(self,ip,port): 
        Thread.__init__(self) 
        self.ip = ip 
        self.port = port 
        print ("[+] Nouveau thread démarré pour " + ip + ":" + str(port))
 
    def run(self): 
        while True : 
            data = con.recv(2048) 
            print("Le serveur a reçu des données:", data) 
            msg = raw_input("Entrez la réponse du serveur ou exit pour sortir:")
            if msg == 'exit':
                break
            con.send(msg)

# Programme du serveur TCP
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) 
s.bind(('127.0.0.1', 9999))
mythreads = [] 
 
while True: 
    s.listen(5) 
    print("Serveur: en attente de connexions des clients TCP ...")  
    (con, (ip,port)) = s.accept() 
    mythread = myThread(ip,port) 
    mythread.start() 
    mythreads.append(mythread) 

for t in mythreads: 
    t.join()

 
 

ClientA.py
import socket 
 
msg = input("ClientA: Entrez un message ou exit pour sortir:") 
 
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
s.connect(("127.0.0.1", 9999))

while msg != 'exit':
    s.send(msg)     
    data = s.recv(2000)
    print("ClientA a reçu des données:", data)
    msg = input("Entrez un message pour continuer ou exit pour sortir:")

s.close()

 

ClientB.py
import socket 
 
msg = input("ClientB : Entrez un message ou exit pour sortir:") 
 
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
s.connect(("127.0.0.1", 9999))

while msg != 'exit':
    s.send(msg)     
    data = s.recv(2000)
    print("ClientB a reçu des données:", data)
    msg = input("Entrez un message pour continuer ou exit pour sortir:")

s.close()

Veuillez exécuter les trois programmes ci-dessus avec la version Python 3. Parce que le code ci-dessus est compatible avec Python 3.
 

Partagez cet article

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *