web-dev-qa-db-ja.com

OSError:[Errno 101]ネットワークに到達できません

Pythonからネットワークブロードキャストを実行すると、次のメッセージが表示されます。OSError:[Errno 101] Network is unreachable

私のコードは次のとおりです。

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

Ipを「<broadcast>」に置き換えましたが、エラーが発生します。私のサーバーはポート4601でリッスンしているので、何が起こっているのか理解できません。また、network-managerで提供される実際のネットワークブロードキャストアドレスに置き換えましたが、それでも何も得られませんでした。

1
KI4JGT

ブロードキャストの場合、TCPを使用するのではなく、UDPを使用する必要があります。次に、sendto()の代わりにconnect()メソッドを使用する必要があります。 sendto()は、この例では「ブロードキャスト」アドレスである特定のアドレスにデータを送信するために使用されます。したがって、次のように動作するはずです。

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