广播利用广播地址255.255.255.255,将发送到局域网中的每个主机,主机可以对收到的广播进行处理或不相应。运用处景:若局域网中有100多台设备,每台设备的型号不一致,若快速区分,可收到广播后回答当前型号,用于管理设备
代码:
import socketimport timeimport jsonimport 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(10)#设置壅塞 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(1024) if msg: print('吸收回答:\n做事端地址:%s\n相应内容:%s'%(addr, msg.decode('utf-8'))) time.sleep(0.2) except Exception as e: #time.sleep(200) break s.close()if __name__=="__main__": win_ip = '192.168.x.x' win_port = 6000 dev_ip = '255.255.255.255' # 单个设备:192.168.x.x,多台设备255.255.255.255 dev_port = 37020 message = '{"devtype":[1111]}' main(win_ip,win_port,dev_ip,dev_port,message)
实行:

测试结果: