【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)把自己加入多播组以及监听在多播服务器指定的多播端口。


五、结语


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


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

相关文章
|
1月前
|
数据采集 存储 数据挖掘
深入探索 Python 爬虫:高级技术与实战应用
本文介绍了Python爬虫的高级技术,涵盖并发处理、反爬虫策略(如验证码识别与模拟登录)及数据存储与处理方法。通过asyncio库实现异步爬虫,提升效率;利用tesseract和requests库应对反爬措施;借助SQLAlchemy和pandas进行数据存储与分析。实战部分展示了如何爬取电商网站的商品信息及新闻网站的文章内容。提醒读者在实际应用中需遵守法律法规。
181 66
|
1月前
|
SQL 数据采集 数据可视化
深入 Python 数据分析:高级技术与实战应用
本文系统地介绍了Python在高级数据分析中的应用,涵盖数据读取、预处理、探索及可视化等关键环节,并详细展示了聚类分析、PCA、时间序列分析等高级技术。通过实际案例,帮助读者掌握解决复杂问题的方法,提升数据分析技能。使用pandas、matplotlib、seaborn及sklearn等库,提供了丰富的代码示例,便于实践操作。
159 64
|
10天前
|
算法 Python
Python图论探索:从理论到实践,DFS与BFS遍历技巧让你秒变技术大牛
图论在数据结构与算法中占据重要地位,应用广泛。本文通过Python代码实现深度优先搜索(DFS)和广度优先搜索(BFS),帮助读者掌握图的遍历技巧。DFS沿路径深入搜索,BFS逐层向外扩展,两者各具优势。掌握这些技巧,为解决复杂问题打下坚实基础。
23 2
|
12天前
|
开发框架 开发者 Python
探索Python中的装饰器:技术感悟与实践
【10月更文挑战第31天】 在编程世界中,装饰器是Python中一种强大的工具,它允许我们在不修改函数代码的情况下增强函数的功能。本文将通过浅显易懂的方式,带你了解装饰器的概念、实现原理及其在实际开发中的应用。我们将一起探索如何利用装饰器简化代码、提高可读性和复用性,同时也会分享一些个人的技术感悟,帮助你更好地掌握这项技术。
29 2
|
16天前
|
数据采集 Web App开发 iOS开发
如何利用 Python 的爬虫技术获取淘宝天猫商品的价格信息?
本文介绍了使用 Python 爬虫技术获取淘宝天猫商品价格信息的两种方法。方法一使用 Selenium 模拟浏览器操作,通过定位页面元素获取价格;方法二使用 Requests 和正则表达式直接请求页面内容并提取价格。每种方法都有详细步骤和代码示例,但需注意反爬措施和法律法规。
|
17天前
|
数据采集 存储 Web App开发
利用Python 的爬虫技术淘宝天猫销量和库存
使用 Python 爬虫技术获取淘宝天猫商品销量和库存的步骤包括:1. 安装 Python 和相关库(如 selenium、pandas),下载浏览器驱动;2. 使用 selenium 登录淘宝或天猫;3. 访问商品页面,分析网页结构,提取销量和库存信息;4. 处理和存储数据。注意网页结构可能变化,需遵守法律法规。
|
18天前
|
数据库 开发者 Python
“Python异步编程革命:如何从编程新手蜕变为并发大师,掌握未来技术的制胜法宝”
【10月更文挑战第25天】介绍了Python异步编程的基础和高级技巧。文章从同步与异步编程的区别入手,逐步讲解了如何使用`asyncio`库和`async`/`await`关键字进行异步编程。通过对比传统多线程,展示了异步编程在I/O密集型任务中的优势,并提供了最佳实践建议。
16 1
|
2月前
|
机器学习/深度学习 算法 数据可视化
8种数值变量的特征工程技术:利用Sklearn、Numpy和Python将数值转化为预测模型的有效特征
特征工程是机器学习流程中的关键步骤,通过将原始数据转换为更具意义的特征,增强模型对数据关系的理解能力。本文重点介绍处理数值变量的高级特征工程技术,包括归一化、多项式特征、FunctionTransformer、KBinsDiscretizer、对数变换、PowerTransformer、QuantileTransformer和PCA,旨在提升模型性能。这些技术能够揭示数据中的潜在模式、优化变量表示,并应对数据分布和内在特性带来的挑战,从而提高模型的稳健性和泛化能力。每种技术都有其独特优势,适用于不同类型的数据和问题。通过实验和验证选择最适合的变换方法至关重要。
46 5
8种数值变量的特征工程技术:利用Sklearn、Numpy和Python将数值转化为预测模型的有效特征
|
1月前
|
人工智能 文字识别 Java
SpringCloud+Python 混合微服务,如何打造AI分布式业务应用的技术底层?
尼恩,一位拥有20年架构经验的老架构师,通过其深厚的架构功力,成功指导了一位9年经验的网易工程师转型为大模型架构师,薪资逆涨50%,年薪近80W。尼恩的指导不仅帮助这位工程师在一年内成为大模型架构师,还让他管理起了10人团队,产品成功应用于多家大中型企业。尼恩因此决定编写《LLM大模型学习圣经》系列,帮助更多人掌握大模型架构,实现职业跃迁。该系列包括《从0到1吃透Transformer技术底座》、《从0到1精通RAG架构》等,旨在系统化、体系化地讲解大模型技术,助力读者实现“offer直提”。此外,尼恩还分享了多个技术圣经,如《NIO圣经》、《Docker圣经》等,帮助读者深入理解核心技术。
SpringCloud+Python 混合微服务,如何打造AI分布式业务应用的技术底层?
|
2月前
|
算法 数据挖掘 Python
Python中的拟合技术:揭示数据背后的模式
Python中的拟合技术:揭示数据背后的模式
40 0
Python中的拟合技术:揭示数据背后的模式