Свойство Mqtt isConnected имеет значение false, но сообщения получены. ⇐ C#
-
Anonymous
Свойство Mqtt isConnected имеет значение false, но сообщения получены.
Я пытаюсь подключиться к Mosquitto с помощью MQTTnet. Я могу получать сообщения, но свойство IsConnected имеет значение false. Кто-нибудь знает, почему? Только для свойства iStart установлено значение true. Похоже, проблема связана с хостом Mosquitto.
mosquitto.conf в основном используется по умолчанию. У меня установлены только эти параметры:
allow_anonymous true файл_пароля C:\mosquitto\passwd tls_version tlsv1.2 файл log_dest C:\mosquitto\log\mosquitto.log Файл журнала пуст.
класс Программа { статическая асинхронная задача Main() { var mqttClientId = "MyClientId"; // Уникальный ClientId или передача GUID как строки для чего-то случайного вар mqttBrokerAddress = «localhost»; // имя хоста или IP-адрес вашего MQTT-брокера var mqttBrokerUsername = «гость»; // Имя пользователя для аутентификации брокера, если используется аутентификация вар mqttBrokerPassword = «гость»; // Пароль аутентификации брокера, если используется аутентификация вар тема = "тема"; // тема для подписки вар mqttClient = новый MqttFactory().CreateManagedMqttClient(); вар mqttClientOptions = новый ManagedMqttClientOptionsBuilder() .WithAutoReconnectDelay(TimeSpan.FromSeconds(5)) .WithClientOptions(новый MqttClientOptionsBuilder() .WithTcpServer(mqttBrokerAddress, 1883) .WithCredentials(mqttBrokerUsername, mqttBrokerPassword) // Удалите эту строку, если нет аутентификации .WithCleanSession().WithKeepAlivePeriod(new TimeSpan(1))//.WithTls(tlsOptions) .Строить() ) .Строить(); mqttClient.ApplicationMessageReceivedAsync += async e => MqttOnNewMessage(e); mqttClient.ConnectedAsync += async e => MqttOnConnected(e); mqttClient.DisconnectedAsync += async e => MqttOnDisconnected(e); mqttClient.SynchronizingSubscriptionsFailedAsync += async e => test(e); mqttClient.ConnectingFailedAsync += async e => test2(e); вар aaa = новый List(); вар bbb = новый MqttTopicFilterBuilder().WithTopic(тема).Build(); ааа.Добавить(BBB); пытаться { ждут mqttClient.SubscribeAsync(ааа); ждут mqttClient.StartAsync(mqttClientOptions); System.Console.WriteLine(mqttClient.IsConnected); } поймать (Исключение ex) { бросать; } Консоль.ReadLine(); } частный статический void test2 (ConnectingFailedEventArgs e) { Консоль.WriteLine(); } частный статический тест void (ManagedProcessFailedEventArgs e) { Консоль.WriteLine(); } Private static void MqttOnNewMessage (MqttApplicationMessageReceivedEventArgs e) { // Делаем что-то с каждым входящим сообщением из темы Console.WriteLine($"Клиент MQTT: OnNewMessage Тема: {e.ApplicationMessage.Topic} / Сообщение: {e.ApplicationMessage.Payload}"); } Private static void MqttOnConnected(MqttClientConnectedEventArgs e) => Console.WriteLine($"Клиент MQTT: подключен с результатом: {e.ConnectResult.ResultCode}"); Private static void MqttOnDisconnected(MqttClientDisconnectedEventArgs e) => Console.WriteLine($"Клиент MQTT: соединение с брокером потеряно по причине: {e.Reason}."); }
Я пытаюсь подключиться к Mosquitto с помощью MQTTnet. Я могу получать сообщения, но свойство IsConnected имеет значение false. Кто-нибудь знает, почему? Только для свойства iStart установлено значение true. Похоже, проблема связана с хостом Mosquitto.
mosquitto.conf в основном используется по умолчанию. У меня установлены только эти параметры:
allow_anonymous true файл_пароля C:\mosquitto\passwd tls_version tlsv1.2 файл log_dest C:\mosquitto\log\mosquitto.log Файл журнала пуст.
класс Программа { статическая асинхронная задача Main() { var mqttClientId = "MyClientId"; // Уникальный ClientId или передача GUID как строки для чего-то случайного вар mqttBrokerAddress = «localhost»; // имя хоста или IP-адрес вашего MQTT-брокера var mqttBrokerUsername = «гость»; // Имя пользователя для аутентификации брокера, если используется аутентификация вар mqttBrokerPassword = «гость»; // Пароль аутентификации брокера, если используется аутентификация вар тема = "тема"; // тема для подписки вар mqttClient = новый MqttFactory().CreateManagedMqttClient(); вар mqttClientOptions = новый ManagedMqttClientOptionsBuilder() .WithAutoReconnectDelay(TimeSpan.FromSeconds(5)) .WithClientOptions(новый MqttClientOptionsBuilder() .WithTcpServer(mqttBrokerAddress, 1883) .WithCredentials(mqttBrokerUsername, mqttBrokerPassword) // Удалите эту строку, если нет аутентификации .WithCleanSession().WithKeepAlivePeriod(new TimeSpan(1))//.WithTls(tlsOptions) .Строить() ) .Строить(); mqttClient.ApplicationMessageReceivedAsync += async e => MqttOnNewMessage(e); mqttClient.ConnectedAsync += async e => MqttOnConnected(e); mqttClient.DisconnectedAsync += async e => MqttOnDisconnected(e); mqttClient.SynchronizingSubscriptionsFailedAsync += async e => test(e); mqttClient.ConnectingFailedAsync += async e => test2(e); вар aaa = новый List(); вар bbb = новый MqttTopicFilterBuilder().WithTopic(тема).Build(); ааа.Добавить(BBB); пытаться { ждут mqttClient.SubscribeAsync(ааа); ждут mqttClient.StartAsync(mqttClientOptions); System.Console.WriteLine(mqttClient.IsConnected); } поймать (Исключение ex) { бросать; } Консоль.ReadLine(); } частный статический void test2 (ConnectingFailedEventArgs e) { Консоль.WriteLine(); } частный статический тест void (ManagedProcessFailedEventArgs e) { Консоль.WriteLine(); } Private static void MqttOnNewMessage (MqttApplicationMessageReceivedEventArgs e) { // Делаем что-то с каждым входящим сообщением из темы Console.WriteLine($"Клиент MQTT: OnNewMessage Тема: {e.ApplicationMessage.Topic} / Сообщение: {e.ApplicationMessage.Payload}"); } Private static void MqttOnConnected(MqttClientConnectedEventArgs e) => Console.WriteLine($"Клиент MQTT: подключен с результатом: {e.ConnectResult.ResultCode}"); Private static void MqttOnDisconnected(MqttClientDisconnectedEventArgs e) => Console.WriteLine($"Клиент MQTT: соединение с брокером потеряно по причине: {e.Reason}."); }
Мобильная версия