import socket import sys import threading ## Le serveur se met en écoute HOST = '0.0.0.0' PORT = 2004 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) #Bind socket to local host and port try: s.bind((HOST, PORT)) except socket.error as msg: print("Bind failed. Error Code : " + str(msg[0]) + " Message " + msg[1]) sys.exit() s.listen(10) print("Serveur en écoute sur "+HOST+":"+str(PORT)); #Cette fonction sera utilisée dans les threads qui traiteront les connections def clientthread(conn): conn.send(("Hello from "+HOST+":"+str(PORT)+"\n").encode('UTF-8')) #Mettre ici l'automate du serveur. #Ici une boucle infinie arrêtée lors de l'envoi d'un chaîne vide while True: #Receiving from client data = conn.recv(1024).decode('UTF-8') reply = 'Recu: ' + data #si la reponse est FIN ou un ligne vide, le dialogue d'arrête. if data.upper().strip() == "FIN" or data.strip() == "": break conn.sendall(reply.encode('UTF-8')) conn.close() #La boucle d'attente des connexions while True: try: conn, addr = s.accept() print('Connection de ' + addr[0] + ':' + str(addr[1])) #Création de la thread qui prendra en charge la connection. #threading.Thread( group=None, target=None, name=None, args=(), kwargs={}) où : # group doit rester à None, en attendant que la classe ThreadGroup soit implantée. # target est la fonction appelée par le Thread. # name est le nom du Thread. # args est un tuple d'arguments pour l'invocation de la fonction target # kwargs est un dictionnaire d'argumens pour l'invocation de la fonction target t=threading.Thread(None, clientthread , None,(conn,), {}) t.start() except KeyboardInterrupt: print("Stop.\n") break s.close()