局域网内的广播通信 —— Python实践教程
1. 什么是局域网广播通信
局域网(LAN, Local Area Network)是指覆盖范围较小的计算机网络,比如学校、家庭或办公室内部的网络。广播通信是一种网络通信方式,允许一个主机向局域网内所有设备同时发送消息,常用于发现服务、群体通知等场景。
2. UDP 广播的原理简介
UDP(User Datagram Protocol)是一种无连接的网络协议,支持快速、简单的数据传输。UDP 允许使用特殊的广播地址(如 255.255.255.255),将数据包发送到同一局域网内的所有主机。所有监听该端口的设备都能收到消息。


3. Python 实现局域网广播通信的基本思路
- 使用 Python 的 socket 库创建 UDP 套接字
- 服务器端设置为广播模式,定时向局域网广播消息
- 客户端监听指定端口,接收并显示广播消息
4. 代码讲解
以 broadcast_on_lan.py
为例。
程序架构
-
服务器端(广播消息)
- 创建 UDP 套接字,并设置为广播类型
- 构造消息内容,定时发送到广播地址和指定端口
-
客户端(接收消息)
- 创建 UDP 套接字,绑定到本机所有 IP 的指定端口
- 持续接收并显示来自服务器的广播消息
程序代码
受保护的内容
请输入密码以查看此内容
用法说明
本程序用于在局域网(LAN)内通过UDP广播实现主机与客户端的消息通信。可作为“服务器”广播消息,也可作为“客户端”接收消息。服务器和客户端可在同一局域网内的不同设备上运行。
【运行环境】
需安装 Python 3
运行设备需在同一局域网内
【用法】
服务器端(广播消息)
在一台主机上运行:
该主机会每2秒向局域网广播一条消息。
客户端(接收消息)
在同一局域网内的任意设备上运行:
该客户端会持续接收并显示主机广播的消息。
【参数说明】
server:以服务器模式运行,广播消息
client:以客户端模式运行,接收消息
【中止方法】
在终端按下 Ctrl+C 可停止程序运行
【注意事项】
服务器和客户端需在同一局域网内,且端口号(默认50000)需一致
某些操作系统或防火墙可能会阻止UDP广播,请确保相关端口已开放
如需修改端口或广播内容,可直接编辑源代码相应部分。
关键代码解析
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # 创建UDP套接字
s.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1) # 设置为广播
s.sendto(msg.encode('utf-8'), (BROADCAST_IP, PORT)) # 发送广播消息
s.bind(('', PORT)) # 客户端绑定端口,监听所有IP
data, addr = s.recvfrom(1024) # 接收数据
5. 程序运行方法与演示
- 确保多台电脑/设备连接在同一局域网内,并已安装 Python 3。
- 将 broadcast_on_lan.py 文件复制到各台设备。
- 在一台设备上作为服务器运行:
python broadcast_on_lan.py server
- 在其他设备上作为客户端运行:
python broadcast_on_lan.py client
- 客户端会实时显示服务器广播的消息。
6. 常见问题与注意事项
- 防火墙或安全软件可能会阻止 UDP 广播,请确保端口 50000 已开放。
- 服务器和客户端必须在同一局域网内,且端口号一致。
- 程序运行时可按 Ctrl+C 中止。
7. 课堂练习
在Linux下,利用Python及其库工具shutil
获取当前磁盘的使用情况(密码:1234):
受保护的内容
请输入密码以查看此内容
运行上述代码,将其中的已用空间的磁盘信息,嵌入到前面UDP广播程序broadcast_on_lan.py
,
使得服务器每2秒广播一次当前磁盘的使用情况,让你的小伙伴知道。
8. 拓展思考
- 如何让客户端也能向服务器发送消息,实现双向通信?
- 如果要实现点对点通信,应该如何修改代码?
- 你能否用类似方法实现一个局域网内的简易聊天室?
通过本教程,我们了解并实践局域网内的广播通信原理,并用 Python 实现一个简单的广播通信系统。而在实际应用中,这种技术可以用于设备发现、服务通知等多种场景。 希望大家在实践中不断探索和创新,提升自己的编程能力和网络通信知识。
更重要的是,我们了解到ROS2的话题通信与UDP广播的区别和联系。ROS2的话题通信是基于发布/订阅模式的,而UDP广播则是基于无连接的消息传递。 两者各有优缺点,适用于不同的场景。在下一堂课,我们将利用ROS2的发布/订阅机制,来实现本节课的简单局域网通信。 而ROS2的发布/订阅机制与UDP广播的区别在于,ROS2提供了更高层次的抽象和功能,如消息类型定义、QoS策略等,使得通信更加灵活和可靠——从而为机器人系统的分布式通信提供了强大的支持。