我有以下代码发送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
那么问题究竟在哪里呢?
尝试绑定到默认地址:
s.bind(('',12345))
我相信在接受的答案中概述的解决方案可以解决问题,但不能以完全正确的方式解决.您不应使用普通接口IP,而应使用用于发送消息的广播IP.例如,如果ifconfig是: