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 : 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
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 : 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
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 :
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