【发布时间】:2019-07-19 13:16:53
【问题描述】:
我有 Linux Ubuntu 18.04 笔记本电脑,并在那里安装了 Mosquitto MQTT 代理。在我的 Windows 10 笔记本电脑上,我正在运行使用 M2Mqtt 库的 Visual Studio 2013 编写的 C# 应用程序。
如果我通过本地主机连接,一切都很好。我启动 Mosquitto 服务器,通过 C# 应用程序连接,订阅一个主题,然后可以整天来回发送消息。
但是当我尝试通过互联网地址进行连接时,我始终收到一个 uPLibrary.Networking.M2Mqtt.Exceptions.MqttConnectionException: “无法建立连接,因为目标机器主动 拒绝它 95.XXX.XXX.134:1883" 错误。(那里的地址是我通过 "WhatsmyIP" 得到的)
这是我到目前为止所做的:
首先,我去了我的路由器,这是一个 TP-LINK AC1200。我将端口设置为转发到Linux机器的本地IP地址。
然后我去我的Linux机器,使用ufw启用1833端口并启用防火墙
从那里我已经尝试了我能想到的一切——我已经使用在命令行中声明的端口运行 Mosquitto,我已经将 conf 文件更改为:
监听器 1883 0.0.0.0
和
监听器 1883 192.168.0.144
我已经完全删除了端口分配和侦听器分配(因为无论如何这是它的默认值)并且我总是得到相同的结果。
我下载了 2 个不同的实用程序 - 一个在 Android 手机上,一个是 Windows 商店提供的应用程序,我也无法连接其中任何一个。 Android手机根本无法连接(它不在同一个网络上,因此不能选择本地主机),其他应用程序将在本地连接,但当我更改为互联网地址时不会。
我感觉我只是错过了一件小事,但我不知道它是什么。还有其他 stackoverflow 问题显示相同的错误,但它们对我没有帮助。
如果重要的话,正在运行的实际 C# 代码是:
try
{
System.Security.Cryptography.X509Certificates.X509Certificate caCert = null;
Boolean useSecureProtocol = false;
int OpenPort = 1883;
// external IP address
String PublicIPAddress = "95.XXX.XXX.134";
// local IP address
String LocalIPAddress = "192.168.0.144";
System.Net.IPAddress ipaddress = System.Net.IPAddress.Parse(PublicIPAddress);
client = new MqttClient(ipaddress, OpenPort, useSecureProtocol, caCert, MqttSslProtocols.TLSv1_0);
// certificate and Protocol are irrelevant because security set to false??
}
catch (System.Net.Sockets.SocketException SException )
{
string SEX = SException.Message;
}
* * *
try
{
Byte retVal = client.Connect(ClientId);
}
catch (uPLibrary.Networking.M2Mqtt.Exceptions.MqttConnectionException ex)
{
string m = ex.Message;
}
配置文件:conf.d(我使用 -C 选项显式运行)
# Place your local configuration in /etc/mosquitto/conf.d/
#
# A full description of the configuration file is at
# /usr/share/doc/mosquitto/examples/mosquitto.conf.example
#
pid_file /var/run/mosquitto.pid
persistence true
persistence_location /var/lib/mosquitto/
log_dest file /home/mark_admin/mosquitto.log
include_dir /etc/mosquitto/conf.d
正如我所说,我已经改变了它并尝试了很多东西:
监听器 1883 192.168.0.144 听众 1883 0.0.0.0 听者1883
以上都不是。只好留空了。他们都没有工作。
【问题讨论】:
-
您是否尝试通过本地 IP 地址访问您的 mqtt 服务器?你也可以发布你的 mosquitto.conf 文件吗
-
@SantoshBalaji:是的,正如我上面所说,我可以通过localhost(即本地IP地址)访问它。
-
可以在这里发布 mosquitto.conf 文件。您的路由器显示的互联网 IP 地址是否与 whatsmyip 网站中显示的 IP 地址相同?
-
@SantoshBalaji:我编辑了显示配置文件的问题。这只是默认设置。我的路由器没有显示我可以在任何菜单中看到的互联网地址。