Problème avec les threads
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:
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:
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.