首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MQTTNet UseApplicationMessageReceivedHandler未触发

MQTTNet UseApplicationMessageReceivedHandler未触发
EN

Stack Overflow用户
提问于 2020-04-30 22:00:23
回答 1查看 1.3K关注 0票数 1

我正在做一个POC,所以这里是快速和肮脏的代码。我使用MQTT.fx桌面客户端来测试我的MQTT服务器的发布/订阅。工作正常。我可以发布/订阅我的主题。我可以从另一个mqtt客户端发布,并获得消息。使用此代码时,当我发布来自MQTT.fx或任何其他发布者的消息时,我不会收到任何消息。如果我使用mqttClient发布,我将收到一些信息(如果您取消对该行的注释)。我在挠头……有人能帮帮忙吗?谢谢。

代码语言:javascript
复制
class Program
{
    private static CancellationTokenSource cts = new CancellationTokenSource(); //TODO create token using the Timeout delay from config
    private static async Task Main(string[] args)
    {
        var factory = new MqttFactory();
        var mqttClient = factory.CreateMqttClient();
        var options = new MqttClientOptionsBuilder()
            .WithClientId("MyClientIDHere")
            .WithTcpServer("IPAddressHere", 1883)
            //.WithCredentials("Wbo", string.Empty)
            //.WithTls()
            .WithCleanSession()
            .Build();
        try
        {
            mqttClient.UseApplicationMessageReceivedHandler(async e =>
            {
                Console.WriteLine("### RECEIVED APPLICATION MESSAGE ###");
                Console.WriteLine($"+ Topic = {e.ApplicationMessage.Topic}");
                Console.WriteLine($"+ Payload = {Encoding.UTF8.GetString(e.ApplicationMessage.Payload)}");
                Console.WriteLine($"+ QoS = {e.ApplicationMessage.QualityOfServiceLevel}");
                Console.WriteLine($"+ Retain = {e.ApplicationMessage.Retain}");
                Console.WriteLine();
            });
            mqttClient.UseConnectedHandler(async e =>
            {
                Console.WriteLine("### CONNECTED WITH SERVER ###");

                // Subscribe to a topic
                await mqttClient.SubscribeAsync(new TopicFilterBuilder().WithTopic("MyClientIDHere/Device_2/Instance_1").Build());

                Console.WriteLine("### SUBSCRIBED ###");
            });
            await mqttClient.ConnectAsync(options, cts.Token);
           // UNCOMMENT AND YOU WILL RECEIVE A MESSAGE Task.Run(() => mqttClient.PublishAsync("MyClientIDHere/Device_2/Instance_1","met=Temperature~data=29"));

        }

        catch (OperationCanceledException)
        {
            Console.WriteLine("task cancelled");   
        }
        catch (Exception e)
        {
            Console.WriteLine(e);
        }

        Console.ReadKey();
    }
}
EN

回答 1

Stack Overflow用户

发布于 2021-03-09 17:15:25

使用最新版本的MQTTnet,我无法重现您的问题,它似乎可以在这里工作。我使用的是一个蚊子MQTT服务器,它位于另一台服务器上,而不是我运行程序的服务器上。

你的代码看起来不错。您可以通过在连接之前订阅主题来改进某些内容。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61525158

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档