c# - 尝试连接 MQTT 代理并尝试从代理接收消息并将其显示到控制台
问题描述
我正在使用 MQTT 代理凭据与 MQTT 代理连接,但我的代码总是转到断开连接的代码块。之后,它向我显示一条错误消息,例如未处理异常。我对这个主题做了很多研究,但我找不到适合这个问题的解决方案。
这是我用于 MQTT 代理连接的完整 C# 代码,
using MQTTnet;
using MQTTnet.Client;
using MQTTnet.Client.Options;
using MQTTnet.Extensions.ManagedClient;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace TreonConsole
{
class Program
{
private static IMqttClient _Client;
private static IMqttClientOptions _options;
static void Main(string[] args)
{
try
{
Console.WriteLine("Starting Subscriber...");
//Create subscriber client
var factory = new MqttFactory();
_Client = factory.CreateMqttClient();
string clientid= Guid.NewGuid().ToString();
//Configure options
_options = new MqttClientOptionsBuilder()
.WithClientId(clientid)
.WithTcpServer("b925270106984f21be3ae9d1d48b400fh.s112.eu.hivemq.cloud", 8883)
.WithCredentials("iap", "Iap321?")
.WithCleanSession()
.Build();
//Handlers
_Client.UseConnectedHandler(e =>
{
Console.WriteLine("Connected successfully with MQTT Brokers.");
//Subscribe to topic
_Client.SubscribeAsync(new MqttTopicFilterBuilder().WithTopic("test").Build()).Wait();
});
_Client.UseDisconnectedHandler(e =>
{
Console.WriteLine("Disconnected from MQTT Brokers.");
});
_Client.UseApplicationMessageReceivedHandler(e =>
{
Console.WriteLine("Received Application Messages");
Console.WriteLine($"+Topic={e.ApplicationMessage.Topic}");
Console.WriteLine($"+Payload={Encoding.UTF8.GetString(e.ApplicationMessage.Payload)}");
Console.WriteLine($"+Qos={e.ApplicationMessage.QualityOfServiceLevel}");
Console.WriteLine($"Retaain={e.ApplicationMessage.Retain}");
Console.WriteLine();
});
//actaully connect
_Client.ConnectAsync(_options).Wait();
Console.WriteLine("Press Key to Exit");
Console.ReadLine();
}
catch (Exception e)
{
Console.WriteLine(e);
throw;
}
}
}
}
解决方案
问题是您没有安全的 TLS 连接。在 MqttClientOptionsBuilder 中添加 WithTls() 选项。
推荐阅读
- t-test - 根据 ggpredict / ggeffect 的输出比较第一/第二差异的统计测试
- java - 基于 JSON 整数属性将 JSON 有效负载反序列化为对象
- php - 获取从给定月份开始到另一个月份结束的月份列表?
- flask - Apache Superset 中的 LDAP 配置
- druid - json 中德鲁伊的后聚合示例查询
- strapi - 有没有办法在 Strapi 中填充嵌套关系?
- javascript - 循环一个数组对象给我在控制台日志中未定义
- html - 我关闭了标签,但在第 9 行收到 TemplateSyntaxError: Unclosed tag: 'if'。寻找其中之一:elif、else、endif
- c# - MongoDB updateMany 使用 equals 设置布尔字段
- bash - Bash 字符串替换添加了前面的空格