1. 程式人生 > 其它 >區域網跨網段發現目標主機ip的組播方案

區域網跨網段發現目標主機ip的組播方案

裝置上實現組播監聽

#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'傳送到多播地址的指定埠,屬於這個多播組的成員都可以收
到這個資訊