MQTT服务端程序
1、立项背景和目标
背景
项目硬件设备采用 WiFi‑MQTT 通信,设备上报带自定义帧头的二进制传感器报文。在硬件未就绪阶段,需要 Windows 上位机作为 MQTT 服务端原型工具,完成通信调试、报文解析、数据落盘验证,支撑上位机业务逻辑开发,规避硬件延期带来的开发阻塞。
目标
搭建 WinForm 可视化 MQTT 服务端,实现服务启停、设备接入管理、二进制报文接收解析;对有效报文做 SQLite 本地持久化,预留历史数据查询能力;日志展示连接状态、原始报文、客户端 IP,作为调试验证工具。
2、软件功能与核心模块
程序基于.NET WinForm 开发,依赖 MQTTnet、Microsoft.Data.Sqlite 8.0.30。
主要功能:自定义端口启停 MQTT 服务;监控设备上下线并获取客户端 IP;接收二进制报文并十六进制日志输出;粘包拆包与 CRC 校验解析协议帧;SQLite 存储有效报文;支持后续扩展历史数据查询页面。
核心模块
1. MqttServerManager MQTT 服务管理模块:封装 MQTT 服务实例,负责服务启动停止,捕获设备上下线、接收 MQTT 消息,向外抛出事件,将数据传递 UI 层,获取接入客户端 IP。
2. ProtocolParser 协议解析模块:维护字节缓冲区,处理 TCP 粘包分包;识别帧头 0xAA 0xBB,截取完整协议帧,完成 CRC16 校验,输出校验通过的完整报文。
3. SqliteDataStorage 存储模块:管理 SQLite 数据库,自动建表索引;保存接收时间、客户端 IP、原始报文;提供分页查询接口供查询页面调用,内部加锁保证多设备并发写入安全。
4. Form1 主 UI 模块:提供端口配置、服务启停、日志展示;绑定业务事件,后台线程数据通过 Invoke 切换主线程更新界面,避免跨线程异常。
3、业务流程与功能路径
整体业务流程:程序启动后,输入监听端口启动 MQTT 服务,等待设备客户端接入。设备连接后上报二进制报文,服务端接收原始字节送入协议解析;解析得到完整有效帧后存入 SQLite 数据库,同时界面输出日志、客户端 IP。设备断开时记录下线日志,支持停止服务释放资源。
关键功能路径
1. 启动服务:界面填写端口→点击启动→调用 MqttServerManager 启动服务,开始监听端口,日志输出启动状态。
2. 设备接入:设备发起 MQTT 连接,触发上线事件,界面打印 ClientId 与客户端 IP。
3. 接收解析存储:MQTT 收到消息→抛出事件传递原始字节→送入 ProtocolParser 做粘包拆包、CRC 校验→得到完整业务帧→调用存储模块写入 SQLite→UI 打印报文日志。
4. 停止服务:点击停止按钮,关闭 MQTT 服务,释放连接资
物联网