我有以下代码,用于发送在子网中广播的udp
数据包。
from socket import *
s=socket(AF_INET, SOCK_DGRAM)
s.setsockopt(SOL_SOCKET, SO_BROADCAST, 1)
s.sendto('this is testing',('255.255.255.255',12345))
以下代码用于接收广播包。
from socket import *
s=socket(AF_INET, SOCK_DGRAM)
s.bind(('172.30.102.141',12345))
m=s.recvfrom(1024)
print m[0]
问题是它没有收到任何广播包。但是,它成功接收发送到该端口的普通udp数据包。
我的机器显然正在接收广播数据包,我使用netcat
进行了测试。
$ netcat -lu -p 12345
this is testing^C
那么问题究竟在哪里?
答案 0 :(得分:24)
尝试绑定到默认地址:
s.bind(('',12345))
答案 1 :(得分:13)
我相信在接受的答案中概述的解决方案可以解决问题,但不能以完全正确的方式解决。您不应使用普通接口IP,而应使用用于发送消息的广播IP。例如,如果ifconfig是:
答案 2 :(得分:2)
s=socket(AF_INET, SOCK_DGRAM)
s.bind(('',1234))
while(1):
m=s.recvfrom(4096)
print 'len(m)='+str(len(m))
print 'len(m[0])='+str(len(m[0]))
print m[0]
print 'len(m[1])='+str(len(m[1]))
print m[1]