OSError: [Errno 101] Rede inacessível

0

Ao fazer uma transmissão de rede a partir do Python, recebo o seguinte: OSError: [Errno 101] A rede está inacessível

Meu código é o seguinte:

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

Substitui ip por "< broadcast >" e é aí que recebo o erro. Meu servidor está escutando na porta 4601, então não entendo o que está acontecendo. Eu também o substitui pelo endereço de transmissão de rede real fornecido no gerenciador de rede e ainda não obtive nada.

    
por KI4JGT 29.01.2015 / 23:43

1 resposta

1

No caso de transmissão, você não deve usar o TCP, mas deve usar o UDP. Então, novamente, você precisa usar o método sendto() em vez de connect() . sendto() é usado para enviar dados para um determinado endereço, que é o endereço "broadcast" no nosso caso. Então, o seguinte deve funcionar:

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))
    
por heemayl 30.01.2015 / 04:10