threads en chat sur Python

threads en chat sur Python - Python - Programmation

Marsh Posté le 16-01-2010 à 16:34:56    

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:

Code :
  1. #####################CLIENT#####################
  2. host = "00:24:7E:D6:C5:9A"
  3. port = 3
  4. import socket, sys, threading, time
  5. from bluetooth import *
  6. class ThreadReception(threading.Thread):
  7.     def __init__(self, conn):
  8.         threading.Thread.__init__(self)
  9.         self.connexion = conn         
  10.        
  11.     def run(self):
  12.         while 1:
  13.             message_recu = self.connexion.recv(1024)
  14.             print "*" + message_recu + "*"
  15.             if message_recu.upper() == "FIN":
  16.                 break
  17.             time.sleep(0.001)
  18.    
  19. class ThreadEmission(threading.Thread):
  20.     def __init__(self, conn):
  21.         threading.Thread.__init__(self)
  22.         self.connexion = conn         
  23.        
  24.     def run(self):
  25.         while 1:
  26.             message_emis = raw_input()
  27.             self.connexion.send(message_emis)
  28.             time.sleep(0.001)
  29. # Programme principal - Établissement de la connexion :
  30. connexion = BluetoothSocket( RFCOMM )
  31. try:
  32.     connexion.connect((host, port))
  33. except socket.error:
  34.     print "La connexion a échoué."
  35.     sys.exit()   
  36. print "Connexion établie avec le serveur."
  37.            
  38. # Dialogue avec le serveur : on lance deux threads pour gérer
  39. # indépendamment l'émission et la réception des messages :
  40. th_E = ThreadEmission(connexion)
  41. th_R = ThreadReception(connexion)
  42. th_E.start()
  43. th_R.start()
  44. th_E.join()
  45. th_R.join()
  46. connexion.close()
  47. ###############SERVEUR####################
  48. from bluetooth import *
  49. import socket, sys, threading,time
  50. port = 3
  51. class ThreadReception(threading.Thread):
  52.     def __init__(self, conn):
  53.         threading.Thread.__init__(self)
  54.         self.connexion = conn         
  55.        
  56.     def run(self):
  57.         while 1:
  58.             try:
  59.                 message_recu = self.connexion.recv(1024)
  60.                 print "*" + message_recu + "*"
  61.                 if message_recu.upper() == "FIN":
  62.                     break
  63.             except:pass   
  64.             time.sleep(0.001)
  65.    
  66. class ThreadEmission(threading.Thread):
  67.     def __init__(self, conn):
  68.         threading.Thread.__init__(self)
  69.         self.connexion = conn         
  70.        
  71.     def run(self):
  72.         while 1:
  73.             message_emis = raw_input()
  74.             try:
  75.                 self.connexion.send(message_emis)
  76.                 if message_emis.upper() == "FIN":
  77.                     break
  78.             except:pass   
  79.             time.sleep(0.001)
  80.            
  81. # Programme principal - Établissement de la connexion :
  82. server_sock = BluetoothSocket( RFCOMM )
  83. server_sock . bind(( "", 3))
  84. server_sock . listen(2)
  85. connexion , client_info = server_sock . accept( )
  86. print "Accepted connection from " , client_info
  87.            
  88. # Dialogue avec le client : on lance deux threads pour gérer
  89. # indépendamment l'émission et la réception des messages :
  90. th_R = ThreadReception(connexion)
  91. th_E = ThreadEmission(connexion)
  92. th_E.start()
  93. th_R.start()
  94. th_R.join()
  95. th_E.join()
  96. connexion.close()
  97. server_sock.close()
  98. <code>

Reply

Marsh Posté le 16-01-2010 à 16:34:56   

Reply

Marsh Posté le 16-01-2010 à 22:21:26    

la question est: pourquoi un thread d'emission dans le serveur ??
le serveur doit juste ecouter sur le port et répondre au demandes...


---------------
Nos estans firs di nosse pitite patreye...
Reply

Marsh Posté le 16-01-2010 à 22:38:01    

Je sais que c'est pas le cas ordinaire. Mais j'aimerais bien faire la chose comme Ça avec plus d'interactivité entre Client/serveur.
Est-ce impossible?


Message édité par mcherkao88 le 16-01-2010 à 22:39:46
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed