1. 项目概述:基于PyQt5的局域网即时通讯工具
最近用PyQt5做了个挺有意思的小工具——一个纯局域网的即时通讯软件。这个ChatAPP最大的特点就是完全基于WiFi网络运行,不需要连接外网,特别适合办公室内部、学校机房或者家庭局域网环境下的快速通讯。代码全部用Python实现,核心功能加起来不到500行,但实现了消息收发、用户列表更新、简单的聊天记录保存等实用功能。
传统即时通讯工具大多依赖中心服务器转发消息,而这个方案采用P2P(点对点)架构。每个客户端同时充当服务器角色,通过UDP广播实现用户发现,TCP连接保障消息可靠传输。这种设计既避免了单点故障,又能在没有互联网的环境下正常工作。实测在百兆局域网内,消息延迟可以控制在50ms以内,完全满足日常通讯需求。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 技术架构解析
2.1 网络通信设计
核心通信模块采用双协议组合方案:
- UDP广播:用于用户发现和心跳维持
- 端口号:37020(可自定义)
- 广播地址:255.255.255.255
- 心跳间隔:5秒
- TCP直连:用于实际消息传输
- 端口范围:37021-37030
- 采用多线程处理并发连接
python复制# UDP广播示例代码
class BroadcastThread(QThread):
def run(self):
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
while True:
sock.sendto(b'HEARTBEAT', ('255.255.255.255', 37020))
time.sleep(5)
2.2 PyQt5界面实现
主界面采用经典的三栏式布局:
- 左侧:用户列表(QListView)
- 中间:消息显示区域(QTextBrowser)
- 底部:消息输入框+发送按钮(QLineEdit+QPushButton)
python复制# 界面初始化示例
sel
