功能说明:
广播使用广播地址,将消息发送到局域网中的每个主机,主机可以对收到的广播进行处理或不响应。应用场景:若局域网中有多台设备,每台设备的型号不一致,若快速区分,可收到广播后回复当前型号,用于管理设备
代码:
import socket
import time
import json
import psutil
# 发送广播
def main(win_ip,win_port,dev_ip,dev_port,message):
# 设置目标地址
dest = (dev_ip,dev_port)
# 创建广播发送器
s = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
# 设置允许广播,地址为接收数据地址
s.bind((win_ip,win_port))
# 设置套接字可以发送接收广播
s.setsockopt(socket.SOL_SOCKET,socket.SO_BROADCAST,1)
#s.setblocking()#设置阻塞
print ("获取电脑端的端口号信息:")
# 'all', 'tcp', 'tcp4', 'udp', 'udp4', 'inet', 'inet4', 'inet6', 'tcp6', 'udp6'
for session in psutil.net_connections(kind="udp"):
if session.laddr.port == win_port:
print (session)
# 发送广播
print ("发送广播:\n%s"%message)
s.sendto(message.encode('utf-8'),dest)
s.settimeout(2) # 设置等待超时时间为5s
while True:
try:
msg, addr = s.recvfrom)
if msg:
print('接收回复:\n服务端地址:%s\n响应内容:%s'%(addr, msg.decode('utf-8')))
time.sleep()
except Exception as e:
#time.sleep)
break
s.close()
if __name__=="__main__":
win_ip = '.x.x'
win_port =
dev_ip = '' # 单个设备:.x.x,多台设备
dev_port =
message = '{"devtype":[]}'
main(win_ip,win_port,dev_ip,dev_port,message)
执行:
测试结果: