區域網跨網段發現目標主機ip的組播方案
阿新 • • 發佈:2022-04-14
裝置上實現組播監聽
#coding:utf-8, from socket import * import time def start_listen(): ANY = '0.0.0.0' MCAST_ADDR = '224.168.2.9' MCAST_PORT = 1600 sock = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP) #建立UDP socket sock.setsockopt(SOL_SOCKET,SO_REUSEADDR,1) #允許埠複用 sock.bind((ANY,MCAST_PORT)) #繫結監聽多播資料包的埠 sock.setsockopt(IPPROTO_IP, IP_MULTICAST_TTL, 255) #告訴核心這是一個多播型別的socket status = sock.setsockopt(IPPROTO_IP, #告訴核心把自己加入指定的多播組,組地址由第三個引數指定 IP_ADD_MEMBERSHIP, inet_aton(MCAST_ADDR) + inet_aton(ANY)); #sock.setblocking(0) ts = time.time() while 1: try: data, addr = sock.recvfrom(1024) print("recv:",data,addr) except error: print("error ",error) start_listen()
windows客戶端加入組播併發送組播訊息
#coding:utf-8, from socket import * import time ANY = '0.0.0.0' SENDERPORT=1501 MCAST_ADDR = '224.168.2.9' MCAST_PORT = 1600 sock = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP) #sock.bind((ANY,SENDERPORT)) #繫結傳送埠到SENDERPORT,即此例的傳送埠為1501 sock.setsockopt(IPPROTO_IP, IP_MULTICAST_TTL, 255) #設定使用多播發送 while 1: time.sleep(1) sock.sendto('Hello World'.encode("utf8"), (MCAST_ADDR,MCAST_PORT) ); #將'hello world'傳送到多播地址的指定埠,屬於這個多播組的成員都可以收
到這個資訊