Python - UDP套接字bind()到正确的地址
我不明白为什么我这样创建一个套接字
from socket import *
s = socket(AF_INET, SOCK_DGRAM)
s.bind(("192.168.1.10",26000))
print s.recvfrom(4096)[0]
然后我试着发送一个广播包,像这样
from socket import *
s = socket(AF_INET, SOCK_DGRAM)
s.setsockopt(SOL_SOCKET, SO_BROADCAST, 1)
s.sendto("hey!", ("<broadcast>", 26000))
结果不行(在recvfrom()那里卡住了),但是如果我把它绑定到“0.0.0.0”,它就能正确接收到数据包。
我知道“0.0.0.0”意味着所有接口上的每个地址都会在那个端口上监听,但为什么直接绑定到一个特定地址就收不到数据包呢?
操作系统:OSX 10.9.2,Python版本:2.7.6
即使我不是在运行Linux,我还是尝试把套接字绑定到子网的广播地址,结果也是一样。
2 个回答
2
为了监听广播数据包,你需要使用以下内容。
sock.bind(("<broadcast>", port_num))
or
sock.bind(("", port_num))