C#MQTTNET服务端使用说明

C#MQTTNET服务端使用说明C#MQTTNET服务端使用说明1.安装MQTTNet两种方式Shell可视化安装2.当前我的项目安装的依赖如下3.如何使用1.我想启动MQTT服务器,我该怎么做?2.我想知道MQTT服务器是否启动成功,我该怎么做?3.我想知道MQTT服务器是否停止允许,我该怎么做?4.我想知道有那些设备连接上了服务器,我该怎么做?5.我想知道有那些设备断开连接,我该怎么做?6.我想监听消息,我该怎么做?7.我想连接的客户端校验身份信息后才允许收发消息,我该怎么做?8.我想知道客户端订阅主题与取消订阅主题,我该怎么做?1.

大家好,又见面了,我是你们的朋友全栈君。


代码github地址

  1. 本次演示使用到的库为:MQTTNET
  2. 开发环境:.NET Framework 4.5以上 或 .Net Core 3.1以上
  3. MQTTNET 其实不太吃.Net版本,这里为了演示用的**.Net Core 3.1**
  4. 因为MQTTNET 是一个标准库,这就意味着你.Net Core版本会使用了,.NET Framework 4.5

1.安装MQTTNet

两种方式

Shell

Install-Package MQTTNET

代码地址

代码github地址

可视化安装

  1. 鼠标右击你的项目——>
  2. 管理NuGet程序包
  3. 再NuGet包页面切换到浏览
  4. 搜索MQTTNet

2.当前我的项目安装的依赖如下

  1. MQTTnet 3.0.16 必要
  2. Microsoft.Extensions.Configuration 3.1.16
  3. Microsoft.Extensions.Configuration.Abstractions 3.1.16
  4. Microsoft.Extensions.Configuration.FileExtensions 3.1.16
  5. Microsoft.Extensions.Configuration.Json 3.1.16
  6. Newtonsoft.Json 13.0.1
  7. Microsoft.Extensions.Options.ConfigurationExtensions 3.1.16

3.如何使用

1.我想启动MQTT服务器,我该怎么做?

 IMqttServer server = new MqttFactory().CreateMqttServer();
 MqttServerOptionsBuilder serverOptions = new MqttServerOptionsBuilder();
 serverOptions.WithDefaultEndpointPort(8080);
 await server.StartAsync(serverOptions.Build());

2.我想知道MQTT服务器是否启动成功,我该怎么做?

server.StartedHandler = new MqttServerStartedHandlerDelegate(StartedHandler);
/// <summary>
/// MQTT启动服务器事件
/// </summary>
/// <param name="obj"></param>
private void StartedHandler(EventArgs obj)
{
  Console.WriteLine($"程序已经启动!监听端口为:{model.Port}");
}

3.我想知道MQTT服务器是否停止允许,我该怎么做?

 server.StoppedHandler = new MqttServerStoppedHandlerDelegate(StoppedHandler);
  /// <summary>
  /// MQTT服务器停止事件
  /// </summary>
  /// <param name="obj"></param>
  private void StoppedHandler(EventArgs obj)
  {
    Console.WriteLine("程序已经关闭");
  }

4.我想知道有那些设备连接上了服务器,我该怎么做?

//客户端连接事件
server.ClientConnectedHandler = new MqttServerClientConnectedHandlerDelegate(ClientConnectedHandler);
/// <summary>
/// 客户端连接到服务器事件
/// </summary>
/// <param name="obj"></param>
private void ClientConnectedHandler(MqttServerClientConnectedEventArgs obj)
{
  throw new NotImplementedException();
}
   server.UseClientConnectedHandler(args =>
   {
   		Console.WriteLine($"{args.ClientId}此客户端已经连接到服务器");
   });

5.我想知道有那些设备断开连接,我该怎么做?

   //客户端断开连接事件
  server.ClientDisconnectedHandler = new MqttServerClientDisconnectedHandlerDelegate(ClientDisconnectedHandler);
  private void ClientDisconnectedHandler(MqttServerClientDisconnectedEventArgs obj)
  {
     Console.WriteLine($"断开连接的客户端:{obj.ClientId}");
     Console.WriteLine($"断开连接类型:{obj.DisconnectType.ToString()}"); 
  }
 server.UseClientDisconnectedHandler(args => {
    Console.WriteLine($"断开连接的客户端:{args.ClientId}");
    Console.WriteLine($"断开连接类型:{args.DisconnectType.ToString()}");
 });

6.我想监听消息,我该怎么做?

 server.ApplicationMessageReceivedHandler = new MqttApplicationMessageReceivedHandlerDelegate(MessageReceivedHandler);
 /// <summary>
 /// 收到各个客户端发送的消息
 /// </summary>
 /// <param name="obj"></param>
 private void MessageReceivedHandler(MqttApplicationMessageReceivedEventArgs obj)
 {
  Console.WriteLine("===================================================");
  Console.WriteLine("收到消息:");
  Console.WriteLine($"客户端:{obj.ClientId}");
  Console.WriteLine($"主题:{obj.ApplicationMessage.Topic}");
  Console.WriteLine($"消息:{Encoding.UTF8.GetString(obj.ApplicationMessage.Payload)}");
  Console.WriteLine("+++++++++++++++++++++++++++++++++++++++++++++++++++");
  Console.WriteLine();
 }
  server.UseApplicationMessageReceivedHandler(args=>{
       Console.WriteLine("===================================================");
       Console.WriteLine("收到消息:");
       Console.WriteLine($"客户端:{args.ClientId}");
       Console.WriteLine($"主题:{args.ApplicationMessage.Topic}");
       Console.WriteLine($"消息:{Encoding.UTF8.GetString(args.ApplicationMessage.Payload)}");
       Console.WriteLine("+++++++++++++++++++++++++++++++++++++++++++++++++++");
       Console.WriteLine();
  });

7.我想连接的客户端校验身份信息后才允许收发消息,我该怎么做?

  IMqttServer server = new MqttFactory().CreateMqttServer();
  MqttServerOptionsBuilder serverOptions = new MqttServerOptionsBuilder();
  serverOptions.WithConnectionValidator(client => {
  	string Account = client.Username;
 	string PassWord = client.Password;
    string clientid = client.ClientId;
    if (Account == "test" && PassWord == "1234")
     {
         client.ReasonCode = MqttConnectReasonCode.Success;
         Console.WriteLine("校验成功");
     }
     else
     {
      client.ReasonCode = MqttConnectReasonCode.BadUserNameOrPassword;
      Console.WriteLine("校验失败");
     }
 });
 await server.StartAsync(serverOptions.Build());

8.我想知道客户端订阅主题与取消订阅主题,我该怎么做?

1.订阅

  //客户端订阅主题事件
server.ClientSubscribedTopicHandler = new MqttServerClientSubscribedHandlerDelegate(ClientSubscribedTopicHandler);
 /// <summary>
 /// 客户端订阅的主题
 /// </summary>
 /// <param name="obj"></param>
 private void ClientSubscribedTopicHandler(MqttServerClientSubscribedTopicEventArgs obj)
 {
   Console.WriteLine($"客户端:{obj.ClientId}");
   Console.WriteLine($"订阅主题:{obj.TopicFilter.Topic}");
 }

2.取消订阅

  //客户端取消订阅主题事件
 server.ClientUnsubscribedTopicHandler = new MqttServerClientUnsubscribedTopicHandlerDelegate(ClientUnsubscribedTopicHandler);
 /// <summary>
 /// 客户端取消订阅主题
 /// </summary>
 /// <param name="obj"></param>
 private void ClientUnsubscribedTopicHandler(MqttServerClientUnsubscribedTopicEventArgs obj)
 {
   Console.WriteLine($"客户端:{obj.ClientId}");
   Console.WriteLine($"取消订阅主题:{obj.TopicFilter}");
 }

9.我想关闭MQTT服务器,我该怎么做?

 public async Task StopAsync()
 {
   if (server != null)
   {
      if (server.IsStarted)
      {
        await server.StopAsync();
        server.Dispose();
      }
   }
 }
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/152895.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • Murmur下载_murmurio

    Murmur下载_murmurioMurmurHash1MurmurHash简介Murmur英文(multiplyandrotate)and(multiplyandrotate),MurmurHash是一种非加密型哈希函数,适用于一般的哈希检索操作。由AustinAppleby在2008年发明,并出现了多个变种,都已经发布到了公有领域(publicdomain)。与其它流行的哈希函数相比,对于规律性较强的key,…

    2022年10月19日
  • uboot之—make smdk2410_config命令详细解析

    uboot之—make smdk2410_config命令详细解析

  • 合成控制法原理

    合成控制法原理合成控制法反事实思维是**鲁宾反事实分析框架(Rubin’scounterfactualframework)**下进行思考,本质思想是为处理组(treatedgroup)找到一个合适的控制组(controlgroup)。合成控制法的思想是对于处理组,选择与处理组具有相似特征且未受到政策干预的控制组。通过对若干个控制区进行线性组合,构造一个近似处理组的合成控制区域(syntheticcontrolregion).对于未受政策影响的潜在控制组(donorpool),通过权重向量给控制组内每

  • 深度相机 结构光_结构光三维成像原理

    深度相机 结构光_结构光三维成像原理版权声明:本文为博主原创文章,未经博主允许不得转载。违者必究。 https://blog.csdn.net/electech6/article/details/78707839 &lt;/div&gt; &lt;linkrel="styles…

    2022年10月26日
  • 各位学弟学妹,别再看教材了,时间复杂度看这篇就好了[通俗易懂]

    各位学弟学妹,别再看教材了,时间复杂度看这篇就好了[通俗易懂]时间复杂度是学习算法的基石,今天我们来聊聊为什么要引入时间复杂度,什么是时间复杂度以及如何去算一个算法的时间复杂度一、刻画算法的运行时间某日,慧能叫来了一尘打算给他补习补习一下基础知识,只见克写了一段非常简单的代码一尘看老师有点生气,开始虚心请教了为了方便讨论,这里我们把每一条语句的执行时间都看做是一样的,记为一个时间单元①蓝色框的两条语句,花费两个时间单元②黑色框的一条语句,花费n+1个时间单元③红色框的两条语句,花费2*n个时间单元这不是.

  • 无线ldap认证服务器,结合LDAP服务器进行portal认证配置案例

    无线ldap认证服务器,结合LDAP服务器进行portal认证配置案例查看LDAP服务器首先登录LDAP服务器,可以看到h3c.com下有一个组织单元”工程部”,其下有两个用户“gongcheng01”和“gongcheng02”。如下图:并且管理员administrator位于h3c.com下的Users下,如下图:按照此结构,接下来配置IMC。配置接入服务首先登录iMC页面,进入【用户-接入策略管理-接入策略配置】中创建接入策略“policy01”,如下图所示:…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号