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

时间:2014-04-13 12:02:20

标签: 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]

我尝试发送一个像这样的广播包

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,我也尝试将套接字绑定到子网广播地址,结果相同。

1 个答案:

答案 0 :(得分:1)

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

之前有关于here

主题的讨论