Advertisement
Guest User

Untitled

a guest
Jul 22nd, 2017
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.31 KB | None | 0 0
  1. #-*- coding: utf-8 -*-
  2.  
  3. # Définition d'un serveur réseau gérant un système de CHAT simplifié.
  4. # Utilise les threads pour gérer les connexions clientes en parallèle.
  5.  
  6. HOST = 'localhost'
  7. PORT = 40000
  8.  
  9. import socket, sys, threading
  10.  
  11. class ThreadClient(threading.Thread):
  12.     '''dérivation d'un objet thread pour gérer la connexion avec un client'''
  13.     def __init__(self, conn):
  14.         threading.Thread.__init__(self)
  15.         self.connexion = conn
  16.        
  17.     def run(self):
  18.         # Dialogue avec le client :
  19.         nom = self.getName()        # Chaque thread possède un nom
  20.         while 1:
  21.             msgClient = self.connexion.recv(1024)
  22.             if msgClient.upper() == "FIN" or msgClient =="":
  23.                 break
  24.             message = "%s> %s" % (nom, msgClient)
  25.             print message
  26.             # Faire suivre le message à tous les autres clients :
  27.             for cle in conn_client:
  28. #                if cle != nom:      # ne pas le renvoyer à l'émetteur
  29.                 conn_client[cle].send(message)
  30.            
  31.         # Fermeture de la connexion :
  32.         self.connexion.close()      # couper la connexion côté serveur
  33.         del conn_client[nom]        # supprimer son entrée dans le dictionnaire
  34.         print "Client %s déconnecté." % nom
  35.         # Le thread se termine ici    
  36.  
  37. # Initialisation du serveur - Mise en place du socket :
  38. mySocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  39. try:
  40.     mySocket.bind((HOST, PORT))
  41. except socket.error:
  42.     print u"La liaison du socket à l'adresse choisie a échoué."
  43.     sys.exit()
  44. print u"Serveur prêt, en attente de requêtes ..."
  45. mySocket.listen(5)
  46.  
  47. # Attente et prise en charge des connexions demandées par les clients :
  48. conn_client = {}                # dictionnaire des connexions clients
  49. while 1:    
  50.     connexion, adresse = mySocket.accept()
  51.     # Créer un nouvel objet thread pour gérer la connexion :
  52.     th = ThreadClient(connexion)
  53.     th.start()
  54.     # Mémoriser la connexion dans le dictionnaire :
  55.     it = th.getName()        # identifiant du thread
  56.     conn_client[it] = connexion
  57.     print u"Client %s connecté, adresse IP %s, port %s." %\
  58.            (it, adresse[0], adresse[1])
  59.     # Dialogue avec le client :
  60.     connexion.send("Vous êtes connecté. Envoyez vos messages.")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement