问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

在C#/Net中使用Mqtt

创作时间:
作者:
@小白创作中心

在C#/Net中使用Mqtt

引用
CSDN
1.
https://blog.csdn.net/qq_39427511/article/details/140104887

MQTT(Message Queuing Telemetry Transport)是一种轻量级的消息传输协议,广泛应用于物联网设备之间的通信。在C#开发中,MQTTnet是一个常用的MQTT客户端库,本文将详细介绍如何在C#项目中使用MQTTnet实现设备间的数据传输。

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;
}
```

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号