Bonsoir,

J'ai un problème avec l'exécution de deux scripts (pour une communication basique entre client et serveur) faisant intervenir les threads, la référence au client par c>message et au serveur par s>message ne fonctionne pas tout le temps.

Ci-joint les deux scripts:

Serveur:

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
 
import socket, sys, threading
 
HOST = ""
PORT = 50010
mySocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
try:
    mySocket.bind((HOST, PORT))
except socket.error:
    print("La liaison du socket à l'adresse choisie a échoué.")
    sys.exit()
print("Serveur prêt, en attente de requêtes ...")
mySocket.listen(5)
connexion, adresse = mySocket.accept()
print("Client connecté, adresse IP %s, port %s" % (adresse[0], adresse[1]))
 
class VersClient(threading.Thread):
    def __init__(self,clientsocket):
        threading.Thread.__init__(self)
        self.clientsocket=clientsocket
        self.clientsocket.send(bytes("Vous êtes connecté au serveur Marcel. Envoyez vos messages.", "utf8"))
 
    def run(self):
        while 1:
            msgServeur = input("S> ")
            self.clientsocket.send(msgServeur.encode())
 
class DepuisClient(threading.Thread):
    def __init__(self,clientsocket):
        threading.Thread.__init__(self)
        self.clientsocket=clientsocket
 
    def run(self):
        while 1:
            msgClient = self.clientsocket.recv(1024)
            msgClient1 = msgClient.decode()
            print("C> "+ msgClient1)
            if msgClient1=="FIN" or msgClient1=="Au revoir !":
                break
        self.clientsocket.send(bytes("Au revoir !", "utf8"))
        print("Connexion interrompue.")
        self.clientsocket.close()        
 
versclient=VersClient(connexion)
depuisclient=DepuisClient(connexion)
depuisclient.start()
versclient.start()
Client :

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
 
import socket, sys, threading
 
HOST = 'LOCALHOST'
PORT = 50010
mySocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
try:
    mySocket.connect((HOST, PORT))
except socket.error:
    print("La connexion a échoué.")
    sys.exit()
print("Connexion établie avec le serveur.")
 
class VersServeur(threading.Thread):
    def __init__(self,clientsocket):
        threading.Thread.__init__(self)
        self.clientsocket=clientsocket
 
    def run(self):
        while 1:
            msgClient = input("C> ")
            self.clientsocket.send(msgClient.encode())
 
class DepuisServeur(threading.Thread):
    def __init__(self,clientsocket):
        threading.Thread.__init__(self)
        self.clientsocket=clientsocket
 
    def run(self):
        while 1:
            msgServeur = self.clientsocket.recv(1024)
            msgServeur1=msgServeur.decode()
            print("S> "+ msgServeur1)
            if msgServeur1=="FIN" or msgServeur1=="Au revoir !":
                break
        self.clientsocket.send(bytes("Au revoir !", "utf8"))
        print("Connexion interrompue.")
 
versserveur=VersServeur(mySocket)
depuiserveur=DepuisServeur(mySocket)
depuiserveur.start()
versserveur.start()
Merci d'avance pour votre aide.