首页 > 代码库 > python实现多播数据的发送和接收
python实现多播数据的发送和接收
在项目中,YS私有协议用到多播技术,在验证其安全特性时用到python去发送多播包,在此做个记录。
多播服务器用于向多播组发送多播数据包,其实现代码如下:
#coding:utf-8,import socket import timeANY = ‘0.0.0.0‘SENDERPORT=1501 MCAST_ADDR = ‘224.168.2.9‘MCAST_PORT = 1600sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP) sock.bind((ANY,SENDERPORT)) #绑定发送端口到SENDERPORT,即此例的发送端口为1501sock.setsockopt(socket.IPPROTO_IP, socket.IP_MULTICAST_TTL, 255) #设置使用多播发送while 1: time.sleep(10) sock.sendto(‘Hello World‘, (MCAST_ADDR,MCAST_PORT) ); #将‘hello world‘发送到多播地址的指定端口,属于这个多播组的成员都可以收到这个信息
通过wireshark捕抓到的数据包如下:
多播客户端用于接收多播服务器发送的多播包,其代码如下:
#coding:utf-8,import socket import timeANY = ‘0.0.0.0‘MCAST_ADDR = ‘224.168.2.9‘MCAST_PORT = 1600 sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP) #创建UDP socketsock.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1) #允许端口复用 sock.bind((ANY,MCAST_PORT)) #绑定监听多播数据包的端口sock.setsockopt(socket.IPPROTO_IP, socket.IP_MULTICAST_TTL, 255) #告诉内核这是一个多播类型的socketstatus = sock.setsockopt(socket.IPPROTO_IP, #告诉内核把自己加入指定的多播组,组地址由第三个参数指定socket.IP_ADD_MEMBERSHIP, socket.inet_aton(MCAST_ADDR) + socket.inet_aton(ANY));sock.setblocking(0) ts = time.time() while 1: try: data, addr = sock.recvfrom(1024) except socket.error, e: pass else: print "We got data!" print "FROM: ", addr print "DATA: ", data
多播客户端代码的关键是通过(socket.IP_ADD_MEMBERSHIP)把自己加入多播组以及监听在多播服务器指定的多播端口(MCAST_PORT),此外,多播服务器的目标地址必须是一个有效的多播地址,而不能是单播地址,比如:(localhost / INADDR_ANY / any valid IP)。
python实现多播数据的发送和接收
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。