socket python - envoyer un message du serveur au client
Bonsoir,
Je suis débutant en python et je m'exerce en ce moment sur les socket, cependant j'ai un soucis:
Ce que je veux faire : J'ai un serveur et un client, dès que le client se connecte au serveur il lui envoie une donnée (un message), le serveur recoie le message et en fonction du message reçu le serveur renvoie un message en particulier.
J'arrive à envoyer un message du client au serveur mais pas du serveur au client, pourtant j'utilise la même methode pour envoyer un message du client au serveur et cela marche, j'aurais besoin d'aide, je vous remercie d'avance.
mes codes :
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
| import socket
host, port = ('', 4444) # le serveur n'a pas besoin d'adresse car il na pas besoin de se connecter il demarre et ecoute
socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) #le premier socket est la varible, le deuxieme est le module socket que l'on instancie avec socket()
socket.bind((host, port)) # on part du socket et avec la methode bind n associe le socket a une adresse,
print("en attente de connection..")
socket.listen(1) # le socket ecoute, jusqua 5 tentatives
conn, adress = socket.accept()
print (adress)
data = conn.recv(1024) #con recoie grace à recv , 1024 est le buffer, tjr en multiple de deux
data = data.decode("utf8") #decode la donnée reçu
print("Message reçu : " + data + "\n")
while True:
if data == "bleu":
print("bleu\n")
del data
data = "ok"
data = data.encode("utf8") # j'encode la donnée text en utf8
socket.sendall(data)
if data == "rouge":
print("Rouge\n")
print("Veuillez patientez avant une nouvelle demande...\n")
conn.close() #on ferme la connection
socket.close() |
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
| import socket
host, port = ('127.0.0.1', 4444) #adresse du localhost et meme port que le serveur
socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) #le premier socket est la varible, le deuxieme est le module socket que l'on instancie avec socket()
try :
socket.connect((host, port)) #on connect le client au serveur
print("\nConnection au serveur:\n")
equipe = "bleu"
equipe = equipe.encode("utf8") # j'encode la donnée text en utf8
socket.sendall(equipe) # send envoie la donnee, sendall envoie toute la donnee
del data
data = conn.recv(1024) #con recoie grace à recv , 1024 est le buffer, tjr en multiple de deux
data = data.decode("utf8") #decode la donnée reçu
print("Message reçu : " + data + "\n")
except:
print("connection au serveur raté")
finally:
socket.close() |
Erreur :
Citation:
en attente de connection..
('127.0.0.1', 57559)
Message reçu : bleu
bleu
Traceback (most recent call last):
File "C:\Users\*****\Desktop\python\test\serveur.py", line 29, in <module>
socket.sendall(data)
OSError: [WinError 10057] Une requête d’envoi ou de réception de données n’a pas été autorisée car le socket n’est pas connecté et (lors de l’envoi sur un socket datagramme en utilisant un appel sendto) aucune adresse n’a été fournie