关于aspnetcore中使用mqttnet库的entire

关于 MqttNet 库的使用问题,在github上 [https://github.com/dotnet/MQTTnet]下载源码,运行里面的 MQTTnet.AspTestApp 项目,
program

// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.

using MQTTnet;
using MQTTnet.AspNetCore;
using MQTTnet.Server;

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddRazorPages();

// Setup MQTT stuff.
builder.Services.AddMqttServer(opt=>
{
    opt.WithDefaultEndpointPort(1883);                           //mqttServerOptionsBuilder.WithEncryptedEndpointPort(port);                        // 使用加密的端点端口
    opt.WithPersistentSessions(true);  // 持续会话
    opt.WithConnectionBacklog(2000);
});
builder.Services.AddConnections();
var app = builder.Build();

if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/Error");
}

app.UseStaticFiles();

app.UseRouting();

app.UseAuthorization();

app.MapRazorPages();

// Setup MQTT stuff.
app.UseEndpoints(endpoints =>
{
    endpoints.MapMqtt("/mqtt");
});

app.UseMqttServer(server =>
{
    
    server.StartedAsync += args =>
    {
        _ = Task.Run(async () =>
        {
            var mqttApplicationMessage = new MqttApplicationMessageBuilder()
                .WithPayload($"Test application message from MQTTnet server.")
                .WithTopic("message")
                .Build();

            while (true)
            {
                try
                {
                    await server.InjectApplicationMessage(new InjectedMqttApplicationMessage(mqttApplicationMessage)
                    {
                        SenderClientId = "server"
                    });
                }
                catch (Exception e)
                {
                    Console.WriteLine(e);
                }
                finally
                {
                    await Task.Delay(TimeSpan.FromSeconds(5));
                }
            }
        });

        return Task.CompletedTask;
    };
});

app.Run();


基本上的官方源码例程, 客户端连接不起来,不知道是不是哪里没有配置好

img

你的连接里面,官方的demo代码并不长成你贴的模样
下面是官方的测试demo代码
https://github.com/dotnet/MQTTnet/blob/master/Samples/Server/Server_ASP_NET_Samples.cs

代码核心是“需要告诉aspnet core启动时同时监听1883端口”------这个其实是对tcp端的处理
当然你可以直接用“ws://localhost:9914/mqtt”进行连接,这个才是ws的连接路径

ps:mqtt通常默认端口
tcp:1883
ws:8083
ssl tcp:1884,
wss:8084

所以你看得到他们是分开监听的,所以按你目前的代码,其实就是ws:9914

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 这篇博客: C#MQTTNET服务端使用说明中的 2.当前我的项目安装的依赖如下 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:
    1. MQTTnet 3.0.16 必要
    2. Microsoft.Extensions.Configuration 3.1.16
    3. Microsoft.Extensions.Configuration.Abstractions 3.1.16
    4. Microsoft.Extensions.Configuration.FileExtensions 3.1.16
    5. Microsoft.Extensions.Configuration.Json 3.1.16
    6. Newtonsoft.Json 13.0.1
    7. Microsoft.Extensions.Options.ConfigurationExtensions 3.1.16
  • 以下回答来自chatgpt:

    作为AI助手,我不确定您指的具体是哪一个问题,请您说明具体的问题细节,我将尽力帮您解答。如果您需要提供更具体错误信息或者现象描述,您可以查看系统日志或者相关的调试信息,也可以与其他相关开发人员交流并收集信息。同时,您可以提供使用的aspnetcore版本号以及MqttNet库版本号,方便对问题进行定位和解决。描述您的使用场景或需求也有助于我们更好地理解问题,并提供更好的解决方案。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^