web-dev-qa-db-fra.com

OSError: [Errno 101] Le réseau est inaccessible

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.

1
KI4JGT

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))
1
heemayl