OSError:[Errno 101] 网络不可达

OSError:[Errno 101] 网络不可达

当从 Python 进行网络广播时,我收到此信息:OSError: [Errno 101] 网络无法访问

我的代码如下:

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

我用“<broadcast>”替换了 ip,然后就出现了错误。我的服务器正在监听端口 4601,所以我不明白发生了什么。我还用 network-manager 中提供的实际网络广播地址替换了它,但仍然没有得到任何结果。

答案1

如果是广播,则不应使用 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))

相关内容