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


五、结语


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


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

相关文章
|
7天前
|
存储 缓存 监控
局域网屏幕监控系统中的Python数据结构与算法实现
局域网屏幕监控系统用于实时捕获和监控局域网内多台设备的屏幕内容。本文介绍了一种基于Python双端队列(Deque)实现的滑动窗口数据缓存机制,以处理连续的屏幕帧数据流。通过固定长度的窗口,高效增删数据,确保低延迟显示和存储。该算法适用于数据压缩、异常检测等场景,保证系统在高负载下稳定运行。 本文转载自:https://www.vipshare.com
102 66
|
11天前
|
存储 运维 监控
探索局域网电脑监控软件:Python算法与数据结构的巧妙结合
在数字化时代,局域网电脑监控软件成为企业管理和IT运维的重要工具,确保数据安全和网络稳定。本文探讨其背后的关键技术——Python中的算法与数据结构,如字典用于高效存储设备信息,以及数据收集、异常检测和聚合算法提升监控效率。通过Python代码示例,展示了如何实现基本监控功能,帮助读者理解其工作原理并激发技术兴趣。
49 20
|
6天前
|
数据采集 存储 缓存
如何使用缓存技术提升Python爬虫效率
如何使用缓存技术提升Python爬虫效率
|
15天前
|
分布式计算 大数据 数据处理
技术评测:MaxCompute MaxFrame——阿里云自研分布式计算框架的Python编程接口
随着大数据和人工智能技术的发展,数据处理的需求日益增长。阿里云推出的MaxCompute MaxFrame(简称“MaxFrame”)是一个专为Python开发者设计的分布式计算框架,它不仅支持Python编程接口,还能直接利用MaxCompute的云原生大数据计算资源和服务。本文将通过一系列最佳实践测评,探讨MaxFrame在分布式Pandas处理以及大语言模型数据处理场景中的表现,并分析其在实际工作中的应用潜力。
49 2
|
2月前
|
数据可视化 图形学 Python
在圆的外面画一个正方形:Python实现与技术解析
本文介绍了如何使用Python的`matplotlib`库绘制一个圆,并在其外部绘制一个正方形。通过计算正方形的边长和顶点坐标,实现了圆和正方形的精确对齐。代码示例详细展示了绘制过程,适合初学者学习和实践。
48 9
|
2月前
|
数据可视化 数据处理 Python
Python编程中的数据可视化技术
在Python编程中,数据可视化是一项强大的工具,它能够将复杂的数据集转化为易于理解的图形。本文将介绍如何使用matplotlib和pandas这两个流行的Python库来实现数据可视化,并展示一些实用的代码示例。通过这些示例,读者将学会如何创建各种图表,包括折线图、柱状图和散点图等,以便更好地理解和呈现数据。
|
2月前
|
存储 数据挖掘 数据处理
Python中的计票技术
本文介绍了如何使用 Python 进行计票,包括使用字典、`collections.Counter` 和 `pandas` 等方法。通过多个示例详细展示了每种方法的具体应用,帮助读者掌握计票技巧。
32 1
|
2月前
|
算法 Python
Python图论探索:从理论到实践,DFS与BFS遍历技巧让你秒变技术大牛
图论在数据结构与算法中占据重要地位,应用广泛。本文通过Python代码实现深度优先搜索(DFS)和广度优先搜索(BFS),帮助读者掌握图的遍历技巧。DFS沿路径深入搜索,BFS逐层向外扩展,两者各具优势。掌握这些技巧,为解决复杂问题打下坚实基础。
38 2
|
2月前
|
开发框架 开发者 Python
探索Python中的装饰器:技术感悟与实践
【10月更文挑战第31天】 在编程世界中,装饰器是Python中一种强大的工具,它允许我们在不修改函数代码的情况下增强函数的功能。本文将通过浅显易懂的方式,带你了解装饰器的概念、实现原理及其在实际开发中的应用。我们将一起探索如何利用装饰器简化代码、提高可读性和复用性,同时也会分享一些个人的技术感悟,帮助你更好地掌握这项技术。
36 2
|
2月前
|
数据采集 Web App开发 iOS开发
如何利用 Python 的爬虫技术获取淘宝天猫商品的价格信息?
本文介绍了使用 Python 爬虫技术获取淘宝天猫商品价格信息的两种方法。方法一使用 Selenium 模拟浏览器操作,通过定位页面元素获取价格;方法二使用 Requests 和正则表达式直接请求页面内容并提取价格。每种方法都有详细步骤和代码示例,但需注意反爬措施和法律法规。