MQTTnet实现client/broker

本文介绍了如何使用MQTTnet库在.NET中实现客户端、消费者和服务器的基本操作,包括创建连接、发送接收MQTT消息,并展示了如何配置用户认证和主题管理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

MQTTnet是实现mqtt协议的net包
可以在MQTTnet 查看详细的使用说明。

实现client

using Microsoft.Extensions.Logging;
using MQTTnet;
using MQTTnet.Client.Options;
using MQTTnet.Client.Receiving;
using MQTTnet.Protocol;
using MQTTnet.Server;
using Newtonsoft.Json.Linq;
using System;
using System.Threading;

namespace clientforMqtt
{
    class Program
    {
        static async System.Threading.Tasks.Task Main(string[] args)
        {
            //创建一个mqttclient
            var factory = new MqttFactory();
            var mqttClient = factory.CreateMqttClient();

            //创建tcp options 用于连接mqtt
            var options = new MqttClientOptionsBuilder()
                //clinet的名称
                .WithClientId("client1")
                //mqtt broker的服务器地址IP,默认的是1883端口
                .WithTcpServer("127.0.0.1",1884)
                //hivemq的登录用户名
                .WithUserProperty("admin","hivemq")
                .WithCleanSession()
                .Build();
            await mqttClient.ConnectAsync(options, CancellationToken.None);

            Console.WriteLine("连接成功");

            while(true)
            {
                Console.WriteLine("请输入MQTT 主题topic,如果退出,请输入Q");
                string topic = Console.ReadLine();
                if (string.Equals(topic, "Q"))
                    break;
                Console.WriteLine("请输入MQTT 内容");
                string payload = Console.ReadLine();
                var message = new MqttApplicationMessageBuilder()
                .WithTopic(topic)
                .WithPayload(payload)
                .WithExactlyOnceQoS()
                .WithRetainFlag()
                .Build();

                await mqttClient.PublishAsync(message, CancellationToken.None);

                Console.WriteLine("发布消息成功");
                Console.WriteLine("-----------------");
            }
        }
    }
}

实现一个消费者客户端

using MQTTnet;
using MQTTnet.Client;
using MQTTnet.Client.Options;
using System;
using System.Text;
using System.Threading;

namespace CosumeMqtt
{
    class Program
    {
        static async System.Threading.Tasks.Task Main(string[] args)
        {

            //创建一个mqttclient
            var factory = new MqttFactory();
            var mqttClient = factory.CreateMqttClient();

            //创建tcp options 用于连接mqtt
            var options = new MqttClientOptionsBuilder()
                //clinet的名称
                .WithClientId("client2")
                //mqtt broker的服务器地址IP,默认的是1883端口
                .WithTcpServer("127.0.0.1", 1884)
                //hivemq的登录用户名
                .WithUserProperty("admin", "hivemq")
                .WithCleanSession()
                .Build();
            await mqttClient.ConnectAsync(options, CancellationToken.None);

            Console.WriteLine("连接成功");


            await mqttClient.SubscribeAsync(new MqttTopicFilterBuilder().WithTopic("mytopic").Build());
            await mqttClient.SubscribeAsync(new MqttTopicFilterBuilder().WithTopic("hello").Build());

            Console.WriteLine("订阅消息成功");
           

            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();

            });

            Console.ReadLine();
        }
    }
}

实现mqtt broker

using MQTTnet;
using MQTTnet.Server;
using System;
using System.Text;

namespace MqttServer
{
    class Program
    {
        static async System.Threading.Tasks.Task Main(string[] args)
        {

            var optionsBuilder = new MqttServerOptionsBuilder()
                                    .WithConnectionBacklog(100)
                                    .WithDefaultEndpointPort(1884);

            var mqttServer = new MqttFactory().CreateMqttServer();
            await mqttServer.StartAsync(optionsBuilder.Build());

            Console.WriteLine("mqtt服务器创建成功");
             mqttServer.UseClientConnectedHandler(async e =>
            {
                Console.WriteLine("客户端连接-----");
                Console.WriteLine("客户端ID:" + e.ClientId);
            });

            mqttServer.UseApplicationMessageReceivedHandler(async e =>
            {
                Console.WriteLine("服务器端接收到信息");
                Console.WriteLine("topic:" + e.ApplicationMessage.Topic);
                Console.WriteLine("payload:" +  Encoding.UTF8.GetString(e.ApplicationMessage.Payload));
            });

            mqttServer.UseClientDisconnectedHandler(async e =>
            {
                Console.WriteLine("客户端断开连接");
                Console.WriteLine("客户端信息clientid:" + e.ClientId);
            });

            Console.ReadLine();
        }
    }
}

最终显示结果

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值