连接MQTT时报错Connectionrefused:connect及无权连接的解决过程
错误日志 org.eclipse.paho.client.mqttv3.MqttException: 无法连接至服务器 at org.eclipse.paho.client.mqttv3.internal.TCPNetworkModule.start(TCPNetworkModule.ja va:8
错误日志
org.eclipse.paho.client.mqttv3.MqttException: 无法连接至服务器
at org.eclipse.paho.client.mqttv3.internal.TCPNetworkModule.start(TCPNetworkModule.ja va:80) ~[org.eclipse.paho.client.mqttv3-1.2.5.jar:na]
at org.eclipse.paho.client.mqttv3.internal.ClientComms$ConnectBG.run(ClientComms.ja va:724) ~[org.eclipse.paho.client.mqttv3-1.2.5.jar:na]
at ja va.lang.Thread.run(Thread.ja va:750) ~[na:1.8.0_333]
Caused by: ja va.net.ConnectException: Connection refused: connect
at ja va.net.DualStackPlainSocketImpl.waitForConnect(Native Method) ~[na:1.8.0_333]
at ja va.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.ja va:81) ~[na:1.8.0_333]
at ja va.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.ja va:476) ~[na:1.8.0_333]
at ja va.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.ja va:218) ~[na:1.8.0_333]
at ja va.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.ja va:200) ~[na:1.8.0_333]
at ja va.net.PlainSocketImpl.connect(PlainSocketImpl.ja va:162) ~[na:1.8.0_333]
at ja va.net.SocksSocketImpl.connect(SocksSocketImpl.ja va:394) ~[na:1.8.0_333]
at ja va.net.Socket.connect(Socket.ja va:606) ~[na:1.8.0_333]
at org.eclipse.paho.client.mqttv3.internal.TCPNetworkModule.start(TCPNetworkModule.ja va:74) ~[org.eclipse.paho.client.mqttv3-1.2.5.jar:na]
... 2 common frames omitted
排查思路
- 首先用ping命令试一下,能不能正常ping通服务端。
- 检查服务端防火墙是否开放了连接所用的端口号。【重点】
- 确认客户端连接服务端的IP地址和端口号没有写错。【仔细核对】
- 再看MQTT服务端的配置文件,是否允许远程连接。【重中之重】
报这个错的原因,本质上是MQTT的配置文件没有开启远程连接导致的。如果你也遇到同样的Connection refused: connect,并且确认是配置问题,那接下来的操作就是关键。
- 修改 mosquitto.conf
如果你在安装目录下找不到这个文件,可以留意一下有没有 mosquitto.conf.example 这个模板文件——把它复制一份并重命名为 mosquitto.conf 即可。如果两个文件都没有,那就只能手动新建一个,把必要的配置项加进去。

- 修改下面两张图中标注的位置

设置允许所有IP连接:

- 接下来是匿名连接权限。本地开发环境可以设为
true,线上环境则务必要设为false。 - 一旦配置了
allow_anonymous false,就必须使用账户密码进行连接了。
如果没有添加匿名配置,或者用户名密码不正确,就会报下面这个错误:
org.eclipse.paho.client.mqttv3.MqttSecurityException: 无权连接
at org.eclipse.paho.client.mqttv3.internal.ExceptionHelper.createMqttException(ExceptionHelper.ja va:28) ~[org.eclipse.paho.client.mqttv3-1.2.5.jar:na]
at org.eclipse.paho.client.mqttv3.internal.ClientState.notifyReceivedAck(ClientState.ja va:1053) ~[org.eclipse.paho.client.mqttv3-1.2.5.jar:na]
at org.eclipse.paho.client.mqttv3.internal.CommsReceiver.run(CommsReceiver.ja va:151) ~[org.eclipse.paho.client.mqttv3-1.2.5.jar:na]
at ja va.lang.Thread.run(Thread.ja va:750) ~[na:1.8.0_333]
总结
整个排查过程并不复杂:先从网络连通性入手,然后看防火墙、IP端口、最后聚焦到配置文件。大部分情况下,把 mosquitto.conf 中的远程访问和匿名权限搞定,连接问题就能迎刃而解。希望这个排查流程能帮你快速定位问题。


































