multithreading python serveur

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • tsic
    New Member
    • Mar 2008
    • 5

    multithreading python serveur

    Bonjour,
    Voici mon code que j'ai utilisé pour faire une communication entre un serveur et des clients.
    Pouvez vous m'aider à l'améliorer pour que l'affichage soit meilleur dans les deux coté (je veux que le nom du thread soit afficher dans le serveur) et aussi il ya un probleme dans le coté client où l'envoye de données est répeté après "s>" je ne sait pas pourquoi. Vous pouvez l'executer sous dos.
    Merci.
    J'attends vos modifications et commentaires.:)

    code serveur:
    from socket import *
    import socket, sys, threading
    import SocketServer

    class GestionnaireEch o(SocketServer. BaseRequestHand ler):

    def handle(self):
    print "Connexion de ", self.client_add ress
    while True:
    donneesRecues = self.request.re cv(8192)
    if not donneesRecues: break
    print "Donnees Recues : ", donneesRecues
    self.request.se ndall(donneesRe cues)
    msg= raw_input("S> ")
    print "Donnees envoyees : ", msg
    self.request.se nd(msg)

    print "Deconnexio n de ", self.client_add ress

    class ThreadClient(th reading.Thread) :
    def __init__(self, conn):
    threading.Threa d.__init__(self )
    self.connexion = conn

    def run(self):

    nom = self.getName()
    while 1:
    msgClient = self.connexion. recv(1024)
    message = "%s> %s" % (nom, msgClient)
    print message

    for cle in conn_client:
    if cle != nom:
    conn_client[cle].send(message)

    self.connexion. close()
    del conn_client[nom]
    print "Client %s deconnecte." % nom
    mySocket = socket.socket(s ocket.AF_INET, socket.SOCK_STR EAM)
    try:
    serveur = SocketServer.Th readingTCPServe r(('127.0.0.1', 84), GestionnaireEch o)
    except socket.error:
    print "La liaison du socket a l'adresse choisie a echoue."
    sys.exit()

    print "En attente..!!!!"
    conn_client = {}

    serveur.serve_f orever()



    code client

    # Definition d"un client reseau gerant en parallele l'emission
    # et la reception des messages (utilisation de 2 THREADS).

    host = '127.0.0.1'
    port = 84

    import socket, sys, threading

    class ThreadReception (threading.Thre ad):
    """objet thread gerant la reception des messages"""
    def __init__(self, conn):
    threading.Threa d.__init__(self )
    self.connexion = conn # ref. du socket de connexion

    def run(self):
    while 1:
    message_recu = self.connexion. recv(1024)
    print "Ser>" + message_recu

    # Le thread <reception> se termine ici.
    # On force la fermeture du thread <emission> :

    print "Client arrete. Connexion interrompue."
    self.connexion. close()

    class ThreadEmission( threading.Threa d):

    """objet thread gerant l'emission des messages"""
    def __init__(self, conn):
    threading.Threa d.__init__(self )
    self.connexion = conn # ref. du socket de connexion

    def run(self):
    message_final=" "
    while 1:
    message_final=" "
    message_emis = raw_input()
    message_final = message_final + " \n "+ message_emis
    self.connexion. send(message_fi nal)



    # Programme principal - etablissement de la connexion :
    connexion = socket.socket(s ocket.AF_INET, socket.SOCK_STR EAM)
    try:
    connexion.conne ct((host, port))
    except socket.error:
    print "La connexion a echoue."
    sys.exit()
    print "Connexion etablie avec le serveur."

    # Dialogue avec le serveur : on lance deux threads pour gerer
    # independamment l'emission et la reception des messages :

    th_E = ThreadEmission( connexion)
    th_R = ThreadReception (connexion)
    th_E.start()
    th_R.start()
  • Laharl
    Recognized Expert Contributor
    • Sep 2007
    • 849

    #2
    Parlez-vous Anglais?

    Comment

    Working...