<code>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 : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
#####################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></code>