栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > .Net

MQTTnet实现client/broker

.Net 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

MQTTnet实现client/broker

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

最终显示结果

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/910169.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号