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

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

#! /usr/bin/python3" title="python3">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()


回答:

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

根据你的代码:

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


回答:

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

以上是 使用python编写udp广播,运行收不到消息 的全部内容, 来源链接: utcz.com/a/159833.html

回到顶部