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
Partager