Lorsque je fais une diffusion réseau depuis Python, je reçois ceci: OSError: [Errno 101] Le réseau est inaccessible.
Mon code est le suivant:
def send(ip, message):
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect((ip, 4601))
try:
sock.sendall(message)
response = sock.recv(1024)
finally:
sock.close()
if response:
return response
else:
return False
J'ai remplacé ip par "<broadcast>" et c'est à ce moment-là que j'ai l'erreur. Mon serveur écoute sur le port 4601, donc je ne comprends pas ce qui se passe. Je l'ai également remplacée par l'adresse de diffusion réseau réelle fournie dans le gestionnaire de réseau et je n'ai toujours rien reçu.
En cas de diffusion, vous ne devez pas utiliser TCP, mais plutôt UDP. Ensuite, vous devez utiliser la méthode sendto()
à la place de connect()
. sendto()
est utilisé pour envoyer des données à une certaine adresse qui est l'adresse "broadcast" dans notre cas. Donc, ce qui suit devrait fonctionner:
import socket
message = "Hello"
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
s.sendto(message, ('<broadcast>', 50000))