使用python编写udp广播,运行收不到消息

#! /usr/bin/python3

import socket
import time

# 发送广播的地址
dest = ('172.60.50.255',9993)

# 创建套接字
sk = socket.socket(family=socket.AF_INET,type=socket.SOCK_DGRAM,proto=0)

# 设置套接字可以广播
sk.setsockopt(socket.SOL_SOCKET,socket.SO_BROADCAST,1)

while True:
    time.sleep(2)
    print('Here')
    sk.sendto('大喇叭广播开始了'.encode(),dest)
    data,addr = sk.recvfrom(1024)
    print('从%s收到的消息%s'%(addr,data.encode()))

#! /usr/bin/python3

import socket

Host = ''
Port = 9993

# 创建套接字
sk = socket.socket(family=socket.AF_INET,type=socket.SOCK_DGRAM,proto=0)

# 设置套接字可以进行广播
sk.setsockopt(socket.SOL_SOCKET,socket.SO_BROADCAST,1)
#固定接收的端口号
sk.bind((Host,Port))

while True:
    try:
        data,addr = sk.recvfrom(1024)
        print('收到广播消息:',data.decode())
        sk.sendto('我在这里'.encode(),addr)
    except (KeyboardInterrupt,SyntaxError):
        raise
    except Exception as e:
        print(e)

sk.close()
阅读 4.8k
2 个回答

NOTE: 我帮你把代码格式整理好了,以后提问问题注意一下

根据你的代码:

下面一段代码应该是可以收到上面代码发送的第一个报文,然后上面的代码就阻塞在 data,addr = sk.recvfrom(1024) 这里了,因为 sk 并没有 bind,所以它无法用来接收报文,解决方法就给 bind 一下

client如果没有bind,会自动选择一个未被占用的端口,所以代码是没错的。
你最好确定一下你的路由器是不是禁止了udp广播,或者你的本机ip是不是172.60.50.255

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题