在.NET7中使用MQTTnet简单实现MQTT通信

一、MQTT简介

MQTT(Message Queuing Telemetry Transport)是一种轻量级的消息传输协议,主要用于物联网设备间的通信。MQTT协议采用客户端/服务器架构,支持发布/订阅模式和点对点模式,具有高效、可靠、灵活等优点。

MQTT协议主要由三个要素构成:发布者(publisher)、代理服务器(broker)和订阅者(subscriber)。发布者将消息发布到代理服务器上,订阅者从代理服务器中订阅消息,代理服务器将消息发送给订阅者。MQTT协议中还有一个重要的概念是主题(topic),主题用于定义消息的类型和内容,发布者可以将消息发布到一个或多个主题上,订阅者可以订阅一个或多个主题的消息。

MQTT协议可以在不可靠的网络上以低带宽传输大量消息,适用于各种类型的物联网应用,例如智能家居、车联网、工业物联网等。由于其轻量级、可靠性高、快速响应等优点,MQTT协议在物联网领域得到了广泛的应用。

二、MQTTnet简介

MQTTnet 是一个跨平台、高性能和开源的 MQTT 客户端库和服务端实现,是 .NET 平台上主流的 MQTT 实现之一。基于 MQTTnet,用户可以方便地在 .NET 平台上集成 MQTT 功能,实现 MQTT 协议的消息传输等功能。

源码地址:https://github.com/dotnet/MQTTnet

三、在.NET7中使用MQTTnet****

1、项目准备

首先创建两个.NET7控制台项目,用来简单实现发布消息订阅功能。一个项目为服务端,一个客户端。

然后安装MQTTnet 包,我们这里选择安装3.12版本,MQTTnet跨版本差距比较大。大家可以在Nuget包管理器里安装,也可以用命令安装。

dotnet add package MQTTnet --3.12

2、服务端代码编写

编写服务端代码,片段代码如下:

 public static async Task MQTTP()
        {
            var factory = new MqttFactory();
            var client = factory.CreateMqttClient();

            var options = new MqttClientOptionsBuilder()
                .WithTcpServer("localhost", 1883)
                .Build();

            await client.ConnectAsync(options);
            while (true)
            {
                Console.WriteLine("输入要发布的信息: ");
                var message = Console.ReadLine();

                var mqttMessage = new MqttApplicationMessageBuilder()
                    .WithTopic("testTopic")
                    .WithPayload(Encoding.UTF8.GetBytes(message))
                    .WithExactlyOnceQoS()
                    .Build();

                await client.PublishAsync(mqttMessage);
            }
        }
    //调用
    static async Task Main(string[] args)
    {
        #region 测试
        await  MQTTP();
        #endregion
    }

3、客户端代码编写

在客户端编写如下代码:

  public static async Task MQTTClientTest()
        {
            var factory = new MqttFactory();
            var client = factory.CreateMqttClient();
            var options = new MqttClientOptionsBuilder()
                .WithTcpServer("localhost", 1883)
                .Build();
            client.UseApplicationMessageReceivedHandler(e =>
            {
                Console.WriteLine($"接收的消息: {Encoding.UTF8.GetString(e.ApplicationMessage.Payload)}");
            });
            await client.ConnectAsync(options);
            await client.SubscribeAsync(new MqttTopicFilterBuilder().WithTopic("testTopic").Build());
        }
     //调用
    static async Task Main(string[] args)
    {
        #region 测试
        await MQTTClientTest();
        #endregion
    }

这样就简单完成了发布订阅的功能,在这个示例中,发布者将消息发布到"testTopic"主题,订阅者订阅了相同的主题,一旦有新消息到达,就会打印出来。这只是一个简单的示例,实际的MQTT使用根据具体的项目场景来使用,比如异常处理等。

4、使用条件和方法:

首先在官网下载安装MQTT,官网为:https://mqtt.org/。

然后把项目的端口号改成mqtt配置的端口。同时运行两个项目就可以尝试了。大家可以拿上面代码尝试一下。

结语

本文介绍了MQTT在.NET7的简单使用,MQTT还有很多功能,大家可以根据MQTTnet 的API来使用其它功能。希望本文能对你带来收获,欢迎留言和吐槽。

来源公众号:DotNet开发跳槽

原文链接:https://www.cnblogs.com/xbhp/p/17302548.html

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:在.NET7中使用MQTTnet简单实现MQTT通信 - Python技术站

(0)
上一篇 2023年4月18日
下一篇 2023年4月18日

相关文章

  • .Net Core服务治理Consul自动扩展和服务调用

    在 .NET Core 中,Consul 是一种服务发现和配置工具,可以帮助我们实现服务治理。以下是 .NET Core 服务治理 Consul 自动扩展和服务调用的完整攻略: 步骤一:安装 Consul 首先,需要安装 Consul。可以从官网下载 Consul 安装包,也可以使用 Docker 安装。以下是一个使用 Docker 安装 Consul 的示…

    C# 2023年5月17日
    00
  • C#函数式编程中的惰性求值详解

    C#函数式编程中的惰性求值是一种重要的编程技巧,它指的是在执行程序时,只在需要的时候才计算数据或执行函数,而不是一开始就全部计算或执行。这种技巧可以提高程序的效率和性能,减少不必要的资源浪费。 惰性求值的实现方式主要有两种:生成器(yield)和延迟函数(Lazy)。其中,生成器是一种用于生成序列的特殊函数,通过调用yield语句来产生序列中的每个元素,延迟…

    C# 2023年5月15日
    00
  • C# Linq的ToArray()方法 – 将序列转换为数组

    C#中Linq的ToArray()方法可将元素集合转化为数组形式,其函数声明如下: public static TSource[] ToArray<TSource>(this IEnumerable<TSource> source); ToArray()方法接收一个IEnumerable集合对象参数,并返回其对应的TSource类型数…

    C# 2023年4月19日
    00
  • C#中的虚方法和抽象方法的运用

    C#中的虚方法和抽象方法是面向对象编程中的重要概念,它们可以帮助程序员实现多态性和继承关系。下面我来详细讲解一下它们的运用。 虚方法 基本概念 虚方法是指在基类中声明的方法,子类可以选择性地重写(override)它,在运行时具有多态效果。虚方法使用 virtual 关键字来修饰。 示例说明 我们可以使用一个简单的图形类作为示例,来演示虚方法的应用。我们先定…

    C# 2023年6月7日
    00
  • 浅析c#范型中的特殊关键字where & default

    浅析C#范型中的特殊关键字where & default 范型参数的约束:where C#中的范型可以使方法或类不依赖于具体类型,从而提供了更强的通用性和可扩展性。但范型也有一些局限性,如类型参数无法被强制转换为不相关类型,无法访问特定的方法或属性等。为了解决这些问题,可以使用“范型参数约束”。 范型参数约束的语法格式如下: class ClassN…

    C# 2023年6月7日
    00
  • C#实现FTP传送文件的示例

    下面是详细讲解“C#实现FTP传送文件的示例”的完整攻略: 一、前置准备 在使用C#来实现FTP传送文件前,我们需要确保我们已经安装了.NET Framework并配置好了我们的FTP服务器。 1. 安装.NET Framework .NET Framework是Microsoft开发和运行Windows操作系统的一个核心组件,我们需要确保我们已经安装了最新…

    C# 2023年6月1日
    00
  • C#中的let字句应用示例

    C#中的let字句应用是指在Linq查询语句中使用let关键字定义一个中间变量,以便在查询语句中多次使用,并提高代码的可读性和性能。 以下是示例说明: 示例一:使用let字句进行分组并计算平均值 假设我们有一组学生数据,包含姓名、班级和分数三个字段,现在我们想要按照班级对学生进行分组,并计算每个班级的平均分。代码示例如下: using System.Linq…

    C# 2023年6月1日
    00
  • js和C# 时间日期格式转换的简单实例

    下面我就详细讲解一下“js和C# 时间日期格式转换的简单实例”的完整攻略。 概述 在编写Web应用程序的过程中,我们经常需要在JavaScript代码和后端代码中进行时间日期格式的转换。本文将介绍如何在JavaScript和C#中进行时间日期格式的相互转换。 JavaScript中时间日期格式转换 在JavaScript中,通常使用Date对象来操作时间日期…

    C# 2023年5月31日
    00
合作推广
合作推广
分享本页
返回顶部