Les threads en chat sur Python
mcherkao
Messages postés
17
Date d'inscription
Statut
Membre
Dernière intervention
-
mcherkao Messages postés 17 Date d'inscription Statut Membre Dernière intervention -
mcherkao Messages postés 17 Date d'inscription Statut Membre Dernière intervention -
Bonjour, Je vient de faire un programme de chat entre PC et SERVEUR sous Python.J'ai réalisé l'a-synchronisme via les Threads. Mon problème est que je ne peut visualisée les donnée envoyées par le client au serveur qu'après faire une émission du serveur au client. Et si j'élimine par exemple le thread d'émission du serveur, alors là l'affichage du message reçu par le serveur est immédiat. Si quelqu'un pourrait me donner un coup de main, je lui serai reconnaissant. Voilà ci joint mon programme: #####################CLIENT##################### host = "00:24:7E:D6:C5:9A" port = 3 import socket, sys, threading, time from bluetooth import * class ThreadReception(threading.Thread): def __init__(self, conn): threading.Thread.__init__(self) self.connexion = conn def run(self): while 1: message_recu = self.connexion.recv(1024) print "*" + message_recu + "*" if message_recu.upper() == "FIN": break time.sleep(0.001) class ThreadEmission(threading.Thread): def __init__(self, conn): threading.Thread.__init__(self) self.connexion = conn def run(self): while 1: message_emis = raw_input() self.connexion.send(message_emis) time.sleep(0.001) # Programme principal - Établissement de la connexion : connexion = BluetoothSocket( RFCOMM ) try: connexion.connect((host, port)) except socket.error: print "La connexion a échoué." sys.exit() print "Connexion établie avec le serveur." # Dialogue avec le serveur : on lance deux threads pour gérer # indépendamment l'émission et la réception des messages : th_E = ThreadEmission(connexion) th_R = ThreadReception(connexion) th_E.start() th_R.start() th_E.join() th_R.join() connexion.close() ###############SERVEUR#################### from bluetooth import * import socket, sys, threading,time port = 3 class ThreadReception(threading.Thread): def __init__(self, conn): threading.Thread.__init__(self) self.connexion = conn def run(self): while 1: try: message_recu = self.connexion.recv(1024) print "*" + message_recu + "*" if message_recu.upper() == "FIN": break except:pass time.sleep(0.001) class ThreadEmission(threading.Thread): def __init__(self, conn): threading.Thread.__init__(self) self.connexion = conn def run(self): while 1: message_emis = raw_input() try: self.connexion.send(message_emis) if message_emis.upper() == "FIN": break except:pass time.sleep(0.001) # Programme principal - Établissement de la connexion : server_sock = BluetoothSocket( RFCOMM ) server_sock . bind(( "", 3)) server_sock . listen(2) connexion , client_info = server_sock . accept( ) print "Accepted connection from " , client_info # Dialogue avec le client : on lance deux threads pour gérer # indépendamment l'émission et la réception des messages : th_R = ThreadReception(connexion) th_E = ThreadEmission(connexion) th_E.start() th_R.start() th_R.join() th_E.join() connexion.close() server_sock.close() <code></code>
A voir également:
- Threading.thread.__init__(self)
- Coco chat - Accueil - Réseaux sociaux
- Remplaçant de Coco : quelles solutions pour tchater gratuitement en ligne ? - Accueil - Réseaux sociaux
- Chat engine - Télécharger - Outils Internet
- Citizen code python avis - Accueil - Outils
- Nouveau site coco chat - Forum Réseaux sociaux
1 réponse
Si par exemple j'élimine dans la partie Client le thread d'émission, j'obtiens un affichage instantané des messages reÇus par le client. Le problème provient du thread d'émission.
J'ai essayé la méthode du VERROU qui doit marcher normalement parce qu'elle ne laisse marcher qu'un seul thread à la fois, mais toujours le même problème.
Quelqu'un a une idée ?
J'ai essayé la méthode du VERROU qui doit marcher normalement parce qu'elle ne laisse marcher qu'un seul thread à la fois, mais toujours le même problème.
Quelqu'un a une idée ?