繁体   English   中英

无法接收python中的UDP广播

[英]Can't receive UDP broadcast in python

这是广播服务器

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)

请注意,您需要使用网络的实际广播地址更改'<broadcast>' 请参阅Python无法发送带有地址的广播包

这是广播接收器

from socket import socket, AF_INET, SOCK_DGRAM
PORT = 50000
client = socket(AF_INET, SOCK_DGRAM)
client.bind(('0.0.0.0', PORT))
data, addr = s.recvfrom(1024) #sticks here forever!

if data:
    print "Found Broadcast server at : " + addr

但是问题是我的接收器只是停留在s.recvfrom(1024)而通过tcpdump我可以看到数据包,那么为什么这个python客户端无法捕获它呢? 命令是sudo tcpdump -i wlan0 ip -X dst host 255.255.255.255

我将您的代码更改为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)

绑定它之前,需要设置套接字选项,并且需要将其绑定到INADDR_BROADCAST。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM