【Python】局域网多播技术简单实现

简介: 一、前言 之前在写工具的时候,产生了一个实现局域网协作功能的想法,刚开始准备采用TCP协议实现C/S模式的局域网广播通信方式。后来经过一番的搜索后发现可以使用局域网多播技术实现,这个技术上手不难,经过几天的捣鼓,最后顺利完成,因此分享给大家。

【Python】局域网多播技术简单实现


一、前言


     之前在写工具的时候,产生了一个实现局域网协作功能的想法,刚开始准备采用TCP协议实现C/S模式的局域网广播通信方式。后来经过一番的搜索后发现可以使用局域网多播技术实现,这个技术上手不难,经过几天的捣鼓,最后顺利完成,因此分享给大家。


二、什么是多播


     “多播”也称为“组播”,是一种允许一个或多个发送者(组播源)发送单一的数据包到多个接收者(一次的,同时的)的网络技术。组播可以极大地节省网络带宽,因为无论有多少个目标地址,在整个网络的任何一条链路上只传送单一的数据包。分类集中控制、网上视频会议、网上视频点播特别适合采用多播方式。


     多播的地址是特定的,D类IP地址就是多播IP地址,即224.0.0.0239.255.255.255之间的IP地址,并被划分为局部连接多播地址、预留多播地址和管理权限多播地址3类:


       局部多播地址:在224.0.0.0~224.0.0.255之间,这是为路由协议和其他用途保留的地址,路由器并不转发属于此范围的IP包。


       预留多播地址:在224.0.1.0~238.255.255.255之间,可用于全球范围(如Internet)或网络协议。


       管理权限多播地址:在239.0.0.0~239.255.255.255之间,可供组织内部使用,类似于私有IP地址,不能用于Internet,可限制多播范围。


三、多播发送者(服务端)


import socket 
import time
Broadcast_Addr = '224.0.0.100'
Broadcast_Port = 10001
#多播协议采用UDP
sock = socket.socket(socket.AF_INET,socket.SOCK_DGRAM,socket.IPPROTO_UDP) 
#绑定发送端口
sock.bind(("0.0.0.0",1101)) 
#设置socket为多播类型
sock.setsockopt(socket.IPPROTO_IP,socket.IP_MULTICAST_TTL, 255) 
while True: 
    # 将'Hello Everybody'发送到多播地址的指定端口
    # 属于这个多播组的成员都可以收到这个信息
    sock.sendto('Hello Everybody',(Broadcast_Addr,Broadcast_Port)); 
    time.sleep(10)


      多播源(服务端)实现比较简单,主要需要关注以下3个地方:


1、创建的socket必须是UDP类型。


2、设置socket类型为多播方式,使用多播方式发送。


3、发送的目标地址必须是D类多播的IP地址。


四、多播接收者(客户端)


import socket 
ANY = '0.0.0.0'
Broadcast_Addr= '224.0.0.100'
Broadcast_Port= 10001
#多播协议采用UDP
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP)
 #允许端口复用 
sock.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
 #绑定监听多播数据包的端口
sock.bind(("0.0.0.0",Broadcast_Port))
#告诉内核这是一个多播类型的socket
sock.setsockopt(socket.IPPROTO_IP, socket.IP_MULTICAST_TTL, 255) 
#告诉内核把自己加入指定的多播组,组地址由第三个参数指定
status = sock.setsockopt(socket.IPPROTO_IP,  
    socket.IP_ADD_MEMBERSHIP, 
    socket.inet_aton(Broadcast_Addr) + socket.inet_aton(ANY));
# 设置为非阻塞
sock.setblocking(0) 
while True: 
    try: 
        # 接收数据
        data, addr = sock.recvfrom(1024) 
        print("recvdata: ",data, "from: ",addr)
    except socket.error, e: 
        pass 


  多播客户端与服务端基本类似,关键代码是通过(socket.IP_ADD_MEMBERSHIP)把自己加入多播组以及监听在多播服务器指定的多播端口。


五、结语


   总的来说还是比较简单,记住关键内容然后结合实际编写,我相信很快就会掌握,说不定马上就可以写一个简单的局域网聊天工具了呢。


欢迎微信搜索"游戏测试开发"关注一起沟通交流。

相关文章
|
4月前
|
存储 监控 API
Python实战:跨平台电商数据聚合系统的技术实现
本文介绍如何通过标准化API调用协议,实现淘宝、京东、拼多多等电商平台的商品数据自动化采集、清洗与存储。内容涵盖技术架构设计、Python代码示例及高阶应用(如价格监控系统),提供可直接落地的技术方案,帮助开发者解决多平台数据同步难题。
|
6月前
|
JSON API 开发者
天猫商品详情API接口技术解析与Python实现
天猫商品详情API(tmall.item_get)通过商品ID获取商品标题、价格、库存、图片、SKU及评价等详细信息,支持HTTP请求与JSON格式返回,适用于电商数据分析与运营。本文提供Python调用示例,实现快速接入与数据解析。
|
3月前
|
数据可视化 大数据 关系型数据库
基于python大数据技术的医疗数据分析与研究
在数字化时代,医疗数据呈爆炸式增长,涵盖患者信息、检查指标、生活方式等。大数据技术助力疾病预测、资源优化与智慧医疗发展,结合Python、MySQL与B/S架构,推动医疗系统高效实现。
|
4月前
|
数据采集 存储 XML
Python爬虫技术:从基础到实战的完整教程
最后强调: 父母法律法规限制下进行网络抓取活动; 不得侵犯他人版权隐私利益; 同时也要注意个人安全防止泄露敏感信息.
810 19
|
5月前
|
数据采集 机器学习/深度学习 数据可视化
Python量化交易:结合爬虫与TA-Lib技术指标分析
Python量化交易:结合爬虫与TA-Lib技术指标分析
|
6月前
|
机器学习/深度学习 数据安全/隐私保护 计算机视觉
过三色刷脸技术,过三色刷脸技术教程,插件过人脸python分享学习
三色刷脸技术是基于RGB三通道分离的人脸特征提取方法,通过分析人脸在不同颜色通道的特征差异
|
6月前
|
机器学习/深度学习 算法 API
淘宝图片搜索接口技术解析与Python实现
淘宝图片搜索接口(拍立淘)基于图像识别技术,允许用户上传商品图片查找相似或相同商品。自2014年上线以来,已服务数千万日活用户,显著提升购物体验。接口通过CNN、ANN等技术实现图像预处理、特征提取与相似度匹配,支持多种调用方式与参数设置。本文提供Python调用示例,便于开发者快速集成。
|
6月前
|
存储 监控 算法
基于 Python 跳表算法的局域网网络监控软件动态数据索引优化策略研究
局域网网络监控软件需高效处理终端行为数据,跳表作为一种基于概率平衡的动态数据结构,具备高效的插入、删除与查询性能(平均时间复杂度为O(log n)),适用于高频数据写入和随机查询场景。本文深入解析跳表原理,探讨其在局域网监控中的适配性,并提供基于Python的完整实现方案,优化终端会话管理,提升系统响应性能。
174 4
|
6月前
|
数据采集 自然语言处理 分布式计算
大数据岗位技能需求挖掘:Python爬虫与NLP技术结合
大数据岗位技能需求挖掘:Python爬虫与NLP技术结合
|
6月前
|
传感器 算法 数据挖掘
Python时间序列平滑技术完全指南:6种主流方法原理与实战应用
时间序列数据分析中,噪声干扰普遍存在,影响趋势提取。本文系统解析六种常用平滑技术——移动平均、EMA、Savitzky-Golay滤波器、LOESS回归、高斯滤波与卡尔曼滤波,从原理、参数配置、适用场景及优缺点多角度对比,并引入RPR指标量化平滑效果,助力方法选择与优化。
1323 0

推荐镜像

更多