469,358 Members | 1,659 Online
Bytes | Developer Community
New Post

Home Posts Topics Members FAQ

Post your question to a community of 469,358 developers. It's quick & easy.

multithreading python serveur

5
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 GestionnaireEcho(SocketServer.BaseRequestHandler):

def handle(self):
print "Connexion de ", self.client_address
while True:
donneesRecues = self.request.recv(8192)
if not donneesRecues: break
print "Donnees Recues : ", donneesRecues
self.request.sendall(donneesRecues)
msg= raw_input("S> ")
print "Donnees envoyees : ", msg
self.request.send(msg)

print "Deconnexion de ", self.client_address

class ThreadClient(threading.Thread):
def __init__(self, conn):
threading.Thread.__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(socket.AF_INET, socket.SOCK_STREAM)
try:
serveur = SocketServer.ThreadingTCPServer(('127.0.0.1',84), GestionnaireEcho)
except socket.error:
print "La liaison du socket a l'adresse choisie a echoue."
sys.exit()

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

serveur.serve_forever()



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.Thread):
"""objet thread gerant la reception des messages"""
def __init__(self, conn):
threading.Thread.__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.Thread):

"""objet thread gerant l'emission des messages"""
def __init__(self, conn):
threading.Thread.__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_final)



# Programme principal - etablissement de la connexion :
connexion = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
try:
connexion.connect((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()
Mar 25 '08 #1
1 2321
Laharl
849 Expert 512MB
Parlez-vous Anglais?
Mar 25 '08 #2

Post your reply

Sign in to post your reply or Sign up for a free account.

Similar topics

5 posts views Thread by Chris | last post: by
7 posts views Thread by Sébastien Ramage | last post: by
20 posts views Thread by S.Mohideen | last post: by
3 posts views Thread by =?ISO-8859-2?Q?Krzysztof_W=B3odarczyk?= | last post: by
reply views Thread by tsic | last post: by
1 post views Thread by tsic | last post: by
reply views Thread by zhoujie | last post: by
reply views Thread by suresh191 | last post: by
1 post views Thread by Marylou17 | last post: by
By using this site, you agree to our Privacy Policy and Terms of Use.