Socket Python – Serveur avec plusieurs clients
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.

