gpt4 book ai didi

c# - mqttnet 客户端没有得到订阅的主题

转载 作者:行者123 更新时间:2023-12-03 09:51:07 24 4
gpt4 key购买 nike

我正在使用 mqtt.net ( https://github.com/chkr1011/MQTTnet ) 并编写了一个小类来处理我的 mqtt 客户端。客户端连接到代理并成功发布它的消息。现在我希望客户也对我订阅客户的一些主题使用react。但这似乎不起作用。我没有遇到任何断点。这是我的代码的相关部分:

    public async Task StartAsync(CancellationToken cancellationToken)
{
//Building the mqtt config
var options = new MqttClientOptionsBuilder()
.WithTcpServer(MqttConfig.Server, MqttConfig.Port)
.WithClientId("HeaterService")
.WithCredentials(MqttConfig.User, MqttConfig.Password)
.WithTls(tlsParameters =>
{
tlsParameters.AllowUntrustedCertificates = true;
})
.WithCleanSession()
.Build();

//Getting an mqtt Instance
MqttClient = new MqttFactory().CreateMqttClient();

//Wiring up all the events...
MqttClient.UseApplicationMessageReceivedHandler( e => { HandleMessageReceived(e.ApplicationMessage); });

MqttClient.UseConnectedHandler(/*async*/ e =>
{
Console.WriteLine("### CONNECTED WITH BROKER ###");

});

await MqttClient.ConnectAsync(options);
}

客户端成功连接到服务器并可以发布消息。

这是我的消息处理函数:
private void HandleMessageReceived(MqttApplicationMessage applicationMessage)
{
Console.WriteLine("### RECEIVED APPLICATION MESSAGE ###");
Console.WriteLine($"+ Topic = {applicationMessage.Topic}");

Console.WriteLine($"+ Payload = {Encoding.UTF8.GetString(applicationMessage.Payload)}");
Console.WriteLine($"+ QoS = {applicationMessage.QualityOfServiceLevel}");
Console.WriteLine($"+ Retain = {applicationMessage.Retain}");
Console.WriteLine();
}

这是我的订阅代码:
public async Task SubscribeTopic(string topic)
{
var subscribeResult = await MqttClient.SubscribeAsync(new TopicFilterBuilder()
.WithTopic(topic)
//.WithQualityOfServiceLevel(MqttQualityOfServiceLevel.AtLeastOnce)
.Build());

Console.WriteLine("### SUBSCRIBED ###");
Console.WriteLine("### Result: " + subscribeResult.Items.FirstOrDefault()?.ResultCode);
Console.WriteLine("### Result: " + subscribeResult.Items.FirstOrDefault()?.TopicFilter);
}

我用“Home/Heater/control/*”调用我类的这个功能;

当我使用 mqtt-explorer 向主题“Home/Heater/control/test”发送测试消息时

函数处理程序 HandleMessageReceived 永远不会被命中。

我做错了什么?

最佳答案

看来你目前没有给你的 SubscribeTopic(string topic) 打电话您的 StartAsync(CancellationToken cancellationToken) 中的方法方法。

除此之外,我个人在开始使用 MQTTNet 时也遇到了一些问题。
Like @Linuxx said注意您调用订阅和连接的顺序。
我还建议添加 Disconnected_Handler给您的客户,以确保连接不会在您不知情的情况下终止。

关于c# - mqttnet 客户端没有得到订阅的主题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59818055/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com