Python - UDP 套接字绑定()到正确的地址

Kav*_*ava 5 python sockets udp bind

我不明白为什么如果我以这种方式创建一个套接字

from socket import *
s = socket(AF_INET, SOCK_DGRAM)
s.bind(("192.168.1.10",26000))
print s.recvfrom(4096)[0]
Run Code Online (Sandbox Code Playgroud)

我尝试向它发送这样的广播数据包

from socket import *
s = socket(AF_INET, SOCK_DGRAM)
s.setsockopt(SOL_SOCKET, SO_BROADCAST, 1)
s.sendto("hey!", ("<broadcast>", 26000))
Run Code Online (Sandbox Code Playgroud)

它不起作用(它挂在 recvfrom() 上)但如果我尝试将它绑定到“0.0.0.0”,它会正确接收数据包。

我知道 0.0.0.0 意味着每个接口上的每个地址都将侦听该端口,但是为什么直接绑定到一个地址会使其不接收数据包?

操作系统:OSX 10.9.2,Python 版本:2.7.6

即使我没有运行 Linux,我还是尝试将套接字绑定到子网广播地址,结果相同。

Kon*_*tin 4

如果操作系统是Linux,则尝试将套接字绑定到子网广播地址。例如,如果您的ifconfig设置是inet addr:192.168.0.62 Bcast:192.168.0.255 Mask:255.255.255.0将接收器套接字绑定到192.168.0.255. 在 Linux 上您将无法使用常规IP 地址

这里有一个关于该主题的先前讨论