我不明白为什么如果我用这种方式创建套接字
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,我仍然尝试将套接字绑定到子网广播地址,结果相同。
socket()
函数接受三个参数,我认为第三个参数在任何情况下都不是可选的。 - Pavel Šimerda