У меня ноутбук с Linux Ubuntu 18.04, и я установил брокера Mosquitto MQTT там.На моем ноутбуке с Windows 10 я запускаю приложение C #, написанное в Visual Studio 2013, которое использует библиотеки M2Mqtt.
Если я подключаюсь через локальный хост, все в порядке.Я запускаю сервер Mosquitto, подключаюсь через приложение C #, подписываюсь на тему, а затем могу отправлять сообщения туда и обратно весь день.
Но когда я пытаюсь подключиться через интернет-адрес, я постоянно получаюuPLibrary.Networking.M2Mqtt.Exceptions.MqttConnectionException: «Невозможно установить соединение, поскольку целевая машина активно отказала ему в ошибке 95.XXX.XXX.134: 1883».(Адрес, который я получил через "WhatsmyIP")
Вот что я сделал до сих пор:
Сначала я пошел к своему маршрутизатору, который является TP-LINK AC1200.Я установил порт для перенаправления на локальный IP-адрес блока Linux.
![TPLINK Screenshot](https://i.stack.imgur.com/6RXMC.png)
Затем я подошел к своему блоку Linux и использовал ufw для включения порта1833 и включите брандмауэр
![Linux Screenshot](https://i.stack.imgur.com/1XvnT.png)
Оттуда я перепробовал все, что мог придумать - я запустил Mosquitto с портом, объявленным в командестрока, я изменил файл conf, чтобы сказать:
Слушатель 1883 0.0.0.0
и
Слушатель 1883 192.168.0.144
Я удалилназначение порта и назначение слушателя полностью (так как это все равно по умолчанию), и всегда я получаю один и тот же результат.
Я скачал 2 разные утилиты - одну на телефон Android, а другую - приложение, доступное в магазине Windows, и я не могу подключиться ни к одной из них.Телефон Android просто не будет подключаться (он не подключен к той же сети, поэтому опция localhost недоступна), а другое приложение будет подключаться локально, но не при переходе на интернет-адрес.
У меня такое чувство, что я просто упускаю одну маленькую вещь, но я не могу понять, что это такое.Есть и другие вопросы, связанные с переполнением стека, которые показывают ту же ошибку, но они мне не помогают.
Если это имеет значение, то текущий код 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
И ничего из вышеперечисленного.Просто оставил это поле пустым.Никто из них не работал.