You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于GSM的远程设备连接Mosquitto MQTT Broker后连接被关闭求助

问题排查分析

1. 端口匹配疑点

服务器日志显示连接来自端口1833,但你设备代码中指定的是标准MQTT端口1883:

AT+CMQTTCONNECT=0,"tcp://52.XX.XX.XXX:1883",14,1,"userid12","password123"

1833通常是MQTT测试网端口,需重点确认:

  • 服务器Mosquitto配置文件mosquitto.conf中,listener是否正确监听1883端口
  • 设备所在网络是否存在路由/防火墙规则,将1883端口的连接请求转发到了1833
  • 直接在服务器上执行netstat -tulpn | grep mosquitto,验证监听端口状态

2. AT命令执行结果未校验

你的代码仅发送AT命令,未读取模组返回的响应结果,这会直接导致无法定位具体失败环节:

  • 每个AT命令执行后必须读取串口返回,判断是否成功:
    • AT+CMQTTSTART应返回OK
    • AT+CMQTTACCQ=0,"xxx"成功会返回+CMQTTACCQ: 0,0
    • AT+CMQTTCONNECT成功返回+CMQTTCONNECT: 0,0,失败会返回对应错误码(如1代表连接被拒绝、2代表网络不可达)

3. MQTT连接参数问题

(1)客户端ID有效性

服务器日志显示Client closed its connection,客户端ID为空是常见拒绝原因:

  • 确认MQTTClientID变量是否被正确赋值,是否为空
  • 客户端ID需符合MQTT规范:无空格、长度1-23字符(MQTT 3.1),且不能与其他在线客户端重复

(2)连接超时参数不合理

AT+CMQTTCONNECT第3个参数是超时时间(秒),你设置的14对于GSM/LTE网络来说过短,建议调整为30或60,避免因网络延迟导致连接超时

(3)用户名密码一致性

虽然MQTTBox能正常连接,仍需确认代码中的userid12和password123是否与MQTTBox使用的完全一致,注意大小写、特殊字符的转义

4. 模组与网络连通性验证

  • 先确认模组已正常附着网络:发送AT+CGATT?,返回+CGATT: 1代表附着成功
  • 测试服务器可达性:发送AT+PING="52.XX.XX.XXX",验证能ping通目标服务器
  • 尝试建立基础TCP连接:用AT+CIPSTART="TCP","52.XX.XX.XXX",1883测试模组TCP栈是否正常工作

5. 服务器侧日志排查

  • 将Mosquitto日志级别调至debug,获取更详细的连接失败细节:
    mosquitto -c mosquitto.conf -v
    
  • 确认服务器防火墙是否允许该GSM设备的IP访问1883端口(即使MQTTBox能连,设备可能处于不同网段被拦截)

内容的提问来源于stack exchange,提问作者Lazzy Coder

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 08:08:23