Can';无法在python中接收UDP广播
这是广播服务器Can';无法在python中接收UDP广播,python,sockets,network-programming,broadcast,Python,Sockets,Network Programming,Broadcast,这是广播服务器 from time import sleep from socket import * PORT = 50000 s = socket(AF_INET, SOCK_DGRAM) s.bind(('', 0)) s.setsockopt(SOL_SOCKET, SO_BROADCAST, 1) data = "I am server" while 1: s.sendto(data, ('<broadcast>', PORT)) print "sent
from time import sleep
from socket import *
PORT = 50000
s = socket(AF_INET, SOCK_DGRAM)
s.bind(('', 0))
s.setsockopt(SOL_SOCKET, SO_BROADCAST, 1)
data = "I am server"
while 1:
s.sendto(data, ('<broadcast>', PORT))
print "sent data"
sleep(5)
但问题是我的接收器只是停留在s.recvfrom(1024)
虽然通过tcpdump我能够看到数据包,但是为什么这个python客户机不能捕获它呢?
命令为
sudo tcpdump-i wlan0 ip-X dst主机255.255.255.255
绑定前需要设置套接字选项,并且需要将其绑定到INADDR\u广播 我将您的代码更改为Python 3,并更正了2个错误:
- 将
更改为s
client
- 仅当存在来自
recvfrom()的数据时才打印语句
from socket import socket, AF_INET, SOCK_DGRAM
PORT = 50000
client = socket(AF_INET, SOCK_DGRAM)
client.bind(('0.0.0.0', PORT))
while True:
data, addr = client.recvfrom(1024) #sticks here forever!
if data:
print("Found Broadcast server at : ", addr)
@阿披实辛,我不会为你写代码。我相信,我的建议是明确的。至少告诉我需要为套接字设置哪些选项,对于服务器,我已经设置了套接字options@AbhishekSingh,相同的-SO_广播。我认为这个建议并不明确,事实上,建议的IPv4(python2套接字)方法似乎是使用“”作为主机名,尽管这似乎也不能解决问题。注意:似乎暗示的(上面的回答)实际上失败了-“提供了无效参数”。在之前的评论中应该提到这一点。所以,为了解释否决票:解决方案并不明确,似乎建议的方案也不起作用。
from socket import socket, AF_INET, SOCK_DGRAM
PORT = 50000
client = socket(AF_INET, SOCK_DGRAM)
client.bind(('0.0.0.0', PORT))
while True:
data, addr = client.recvfrom(1024) #sticks here forever!
if data:
print("Found Broadcast server at : ", addr)