当前位置: 首页 > news >正文

在C#/Net中使用Mqtt

net中MQTT的应用场景

c#常用来开发上位机程序,或者其他一些跟设备打交道比较多的系统,所以会经常作为拥有数据的终端,可以用来采集上传数据,而MQTT也是物联网常用的协议,所以下面介绍在C#开发中使用MQTT。

安装MQTTnet

在c#开发中使用MQTTnet包,在nuget管理器中搜索MQTTnet,然后安装

在这里插入图片描述

MQTT使用

添加命名空间

using MQTTnet;
using MQTTnet.Client;
using MQTTnet.Protocol;

创建一个MqttClient

 Console.WriteLine("Hello, World!");MqttClientOptionsBuilder optionsBuilder = new MqttClientOptionsBuilder().WithTcpServer("127.0.0.1", 1883).WithClientId("testClient1");var clientOptions = optionsBuilder.Build();IMqttClient _mqttClient = new MqttFactory().CreateMqttClient();

创建连接

  _mqttClient.ConnectAsync(clientOptions);

发送消息

先创建一个mqtt消息,填入主题(Topic),消息内容(PayloadSegment),然后使用PublishAsync方法发送

 var message = new MqttApplicationMessage{Topic = "testtopic/topic1",//主题PayloadSegment = Encoding.Default.GetBytes("test Message"),QualityOfServiceLevel = MqttQualityOfServiceLevel.AtLeastOnce,Retain = true // 服务端是否保留消息。true为保留,如果有新的订阅者连接,就会立马收到该消息。};_mqttClient.PublishAsync(message);

在mqttx中订阅对应主题,就能收到

在这里插入图片描述

订阅主题中#,表示通配符,说明该分类下testtpoic/的主题都会订阅。

订阅一个主题

    _mqttClient.SubscribeAsync("topic1", MqttQualityOfServiceLevel.AtLeastOnce); 

添加各种事件订阅

IMqttClient有下面这些事件可以使用
在这里插入图片描述

常用事件的添加:

// 客户端连接成功事件
_mqttClient.ConnectedAsync += MqttClient_ConnectedAsync;
// 客户端连接关闭事件
_mqttClient.DisconnectedAsync += MqttClient_DisconnectedAsync;
// 收到消息事件
_mqttClient.ApplicationMessageReceivedAsync +=MqttClient_ApplicationMessageReceivedAsync;private static Task MqttClient_ConnectedAsync(MqttClientConnectedEventArgs arg)
{Console.WriteLine("客户端已断开与服务端的连接……");return Task.CompletedTask;
}private static Task MqttClient_DisconnectedAsync(MqttClientDisconnectedEventArgs arg)
{Console.WriteLine($"客户端已断开与服务端的连接……");return Task.CompletedTask;
}private static Task MqttClient_ApplicationMessageReceivedAsync(MqttApplicationMessageReceivedEventArgs arg
)
{Console.WriteLine($"ApplicationMessageReceivedAsync:客户端ID=【{arg.ClientId}】接收到消息。 Topic主题=【{arg.ApplicationMessage.Topic}】 消息=【{Encoding.UTF8.GetString(arg.ApplicationMessage.PayloadSegment)}】 qos等级=【{arg.ApplicationMessage.QualityOfServiceLevel}】");return Task.CompletedTask;
}

关注可获取更多资料,源码和使用和说明文档↓↓

http://www.lryc.cn/news/393191.html

相关文章:

  • VBA提取word表格内容到excel
  • html+css+js图片手动轮播
  • 【十三】图解 Spring 核心数据结构:BeanDefinition 其二
  • 数据库作业
  • 12、matlab中for循环,if else判断语句,break和continue用法以及switch case语句使用
  • AcWing 3207:门禁系统 ← 桶排序中“桶”的思想
  • 开发个人Go-ChatGPT--3 服务拆分
  • Android --- 新电脑安装Android Studio 使用 Android 内置模拟器电脑直接卡死,鼠标和键盘都操作不了
  • 从入门到深入,Docker新手学习教程
  • Postman编写测试脚本
  • 代码随想录算法训练Day57|LeetCode200-岛屿数量、LeetCode695-岛屿的最大面积
  • StopWatch的使用
  • MySQL基础篇(三)数据库的修改 删除 备份恢复 查看连接情况
  • android手机电视相框项目-学员做出个bug版本邀请大家review提意见
  • web零碎知识2
  • Android项目框架
  • vue 模糊查询加个禁止属性
  • MySQL 主从复制中 MHA 工具的研究与实践
  • Hi3861 OpenHarmony嵌入式应用入门--TCP Server
  • Poker Game, Run Fast
  • 订单折扣金额分摊算法|代金券分摊|收银系统|积分分摊|分摊|精度问题|按比例分配|钱分摊|钱分配
  • Matlab中collectPlaneWave函数的应用
  • Linux系统的基础知识和常用命令
  • 三相异步电动机的起动方法
  • 【LinuxC语言】手撕Http协议之accept_request函数实现(一)
  • Redis Cluster 模式 的具体实施细节是什么样的?
  • 基于大模型的机器人控制
  • 在 PostgreSQL 中,如何处理数据的版本控制?
  • Rust 组织管理
  • vb.netcad二开自学笔记1:万里长征第一步Hello CAD!