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)