C# 无法使MOSQUITO允许从外部本地网络进行连接
我有LinuxUbuntu18.04笔记本电脑,我在那里安装了MosquittoMQTT代理。在我的Windows 10笔记本电脑上,我正在运行一个用Visual Studio 2013编写的使用M2Mqtt库的C#应用程序 如果我通过本地主机连接,一切正常。我启动MOSQUITO服务器,通过C#应用程序连接,订阅一个主题,然后可以整天来回发送消息 但当我尝试通过internet地址连接时,我始终会得到uPLibrary.Networking.M2Mqtt.Exceptions.MqttConnectionException: “无法建立连接,因为目标计算机处于活动状态 拒绝它95.XXX.XXX.134:1883“错误。(那里的地址是我通过“WhatsmyIP”获得的) 以下是我迄今为止所做的工作: 首先,我去了我的路由器,它是一个TP-LINK AC1200。我将端口设置为转发到Linux设备的本地IP地址 然后我转到我的Linux机器,使用ufw启用端口1833并启用防火墙 从那以后,我尝试了我能想到的一切——我在命令行中声明了端口并运行了mosquito,我将conf文件更改为: 监听器1883 0.0.0.0 及 监听器1883 192.168.0.144 我已经完全删除了端口分配和侦听器分配(因为这是它的默认值),并且总是得到相同的结果 我下载了两个不同的实用程序——一个是安卓手机上的,另一个是Windows应用商店提供的应用程序,我也无法连接其中任何一个。Android手机根本无法连接(它不在同一个网络上,因此localhost不是一个选项),而另一个应用程序将在本地连接,但当我更改到internet地址时不会连接 我有种感觉,我只是错过了一件小事,但我不知道它是什么。还有其他stackoverflow问题显示了相同的错误,但它们对我没有帮助 如果重要的话,正在运行的实际C#代码是:C# 无法使MOSQUITO允许从外部本地网络进行连接,c#,tcp,mqtt,mosquitto,C#,Tcp,Mqtt,Mosquitto,我有LinuxUbuntu18.04笔记本电脑,我在那里安装了MosquittoMQTT代理。在我的Windows 10笔记本电脑上,我正在运行一个用Visual Studio 2013编写的使用M2Mqtt库的C#应用程序 如果我通过本地主机连接,一切正常。我启动MOSQUITO服务器,通过C#应用程序连接,订阅一个主题,然后可以整天来回发送消息 但当我尝试通过internet地址连接时,我始终会得到uPLibrary.Networking.M2Mqtt.Exceptions.MqttConn
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选项显式运行)
正如我所说,我改变了它,尝试了很多事情:
监听器1883 192.168.0.144
监听器1883 0.0.0.0
听众1883
以上都没有。只留下空白。它们都不起作用。我将此作为一个答案发布,这样我可以提供更多细节,以防将来有人偶然发现 在Ubuntu18.04中设置MOSQUITTO MQTT服务器其实并不难,但步骤很重要 步骤1:安装MOSQUITO软件
sudo apt-add-repository ppa:mosquitto-dev/mosquitto-ppa
sudo apt-get update
sudo apt-get install mosquitto
步骤2:打开端口1883并启动防火墙
sudo ufw allow 1883
sudo ufw enable
步骤3:验证MOSQUITO尚未运行
pgrep mosquitto
[注意,如果有数字显示,这是已经运行的Mosquitto的PID。您可以将其杀死。此外,您可以尝试:sudo服务Mosquitto stop]
步骤4:使用verbose选项启动Mosquetto
mosquitto -v
[注意:这会在不使用任何配置文件的情况下启动MOSQUITO。它会将连接和状态信息回显到屏幕上。便于快速调试。]
步骤5:使用本地主机检查连接
转到您的客户机(在我的示例中是Windows 10笔记本电脑)并运行MQTT客户机,连接到Linux Mosquito服务器的本地地址(在我的示例中是192.168.0.144)。你应该能够连接。事实上,您甚至可以在打开防火墙之前执行此步骤,因为这都在本地网络上,所以防火墙规则在这一点上是不相关的。直到下一步
步骤6:使用web工具检查连接
sudo ufw allow 1883
sudo ufw enable
使用:或
[注意:除非MOSQUITTO代理正在运行,否则您将无法获得打开的状态]
步骤7:如果从Internet(即非本地主机)进入时端口显示关闭
这就是我被绊倒的地方。在我的例子中,我有一个Verizon调制解调器,它也有一个防火墙(因为它有一个路由器)。我有自己的无线路由器,一个tp-link Archer C1200,我已将其插入Fios调制解调器/路由器。我首先将端口转发放在tp链接中。但是防火墙在Fios防火墙之后,所以我需要到第一道墙,在那里做端口转发
这是第二件棘手的事情。所有的在线指南都说我应该将端口1883转发到我的Linux服务器的本地IP地址,在我的例子中是192.168.0.144。但对我来说,这是不正确的。Archer C1200实际上是我需要转发的设备——它从那里处理正确的分发。它有一个地址192.168.0.152从Verizon路由器分配给它。我仍然有两个转载到位(即FIO和tp链接),我的猜测是,我需要他们两个
现在所有路径都已打开,您可以按照其他有关日志、配置文件、守护进程等的MOSQUITO说明进行操作
希望这能为大家节省一些时间 我将此作为一个答案发布,这样我可以提供更多细节,以防将来有人无意中发现这一点 在Ubuntu18.04中设置MOSQUITTO MQTT服务器其实并不难,但步骤很重要 步骤1:安装MOSQUITO软件
sudo apt-add-repository ppa:mosquitto-dev/mosquitto-ppa
sudo apt-get update
sudo apt-get install mosquitto
步骤2:打开端口1883并启动防火墙
sudo ufw allow 1883
sudo ufw enable
步骤3:验证MOSQUITO尚未运行
pgrep mosquitto
[注意,如果有数字显示,这是已经运行的Mosquitto的PID。您可以将其杀死。此外,您可以尝试:sudo服务Mosquitto stop]
步骤4:使用verbose选项启动Mosquetto
mosquitto -v
[注意:这会在不使用任何配置文件的情况下启动MOSQUITO。它会将连接和状态信息回显到屏幕上。便于快速调试。]
步骤5:使用本地主机检查连接
转到您的客户机(在我的例子中是Windows 10笔记本电脑)并运行MQTT客户机,连接