使用MqttClient

从库中使用MQTT客户端非常简单。首先,您必须创建一个MqttClient类,它只提供一个强制参数(要连接到的代理的IP地址或主机名)和一些具有默认值的可选参数(MQTT Broker端口、安全连接和X.509证书)。在更简单的情况下,您可以使用默认端口(1883),并且不支持基于SSL/TLS的安全连接,使用的是可选参数的默认值,并且只指定代理地址(或主机名)。

1

MqttClient client = new MqttClient(IPAddress.Parse("192.168.10.53"));

在连接到代理之前,可以注册到事件。MqttMsgPublishReces在客户端订阅的主题上发布消息时引发。在这种情况下,您必须提供一个事件处理程序来使用MqttMsgPublishEventArgs公开数据字节的讯息财产。

1

2

3

4

5

6

client.MqttMsgPublishReceived += client_MqttMsgPublishReceived;

...

void client_MqttMsgPublishReceived(object sender, MqttMsgPublishEventArgs e)

{

// access data bytes throug e.Message

}

您还可以感兴趣地了解某个主题的订阅和/或取消订阅是否已完成并已向代理注册。在这种情况下,可以为事件定义两个事件处理程序。MqttMsgMqttMsgUn订阅.

1

2

3

4

5

6

7

8

9

10

11

12

client.MqttMsgSubscribed += client_MqttMsgSubscribed;

client.MqttMsgUnsubscribed += client_MqttMsgUnsubscribed;

...

void client_MqttMsgUnsubscribed(object sender, MqttMsgUnsubscribedEventArgs e)

{

// write your code

}

void client_MqttMsgSubscribed(object sender, MqttMsgSubscribedEventArgs e)

{

// write your code

}

如果使用qos级别1或2在指定主题上发布消息,也可以注册到MqttMsg发布事件,该事件将在将消息传递(准确地说是一次)到主题上的所有订阅者时引发。

1

2

3

4

5

6

client.MqttMsgPublished += client_MqttMsgPublished;

...

void client_MqttMsgPublished(object sender, MqttMsgPublishedEventArgs e)

{

// write your code

}

注册到您感兴趣的所有事件之后,可以使用连接()方法MqttClient类连接到代理。唯一的强制参数是必须是唯一的客户端ID;其他参数有一些默认值,它们与:

  • 用于客户端身份验证的用户名和密码(默认值为没有认证);
  • Will Message功能(默认值不提供Will Message);
  • 用于在断开连接时删除订阅的干净会话(默认值为千真万确);
  • 使用ping消息保持活动期以保持活动连接(默认值为60秒);

在不使用所有MQTT高级特性(身份验证和“Will”消息)的情况下,您可以只指定客户机ID(例如生成的GUID),并使用干净的会话标志设置默认的保持活动周期。

1

client.Connect(Guid.NewGuid().ToString());

若要订阅和取消订阅主题,请将MqttClient类提供订阅()取消订阅()方法。前者需要主题列表和相对的QoS级别来订阅,后者只需要取消订阅的主题列表。

1

2

3

4

string[] topic = { "sensor/temp", "sensor/humidity" };

byte[] qosLevels = { MqttMsgBase.QOS_LEVEL_AT_MOST_ONCE, MqttMsgBase.QOS_LEVEL_AT_MOST_ONCE };

client.Subscribe(topic, qosLevels);

订阅()方法返回订阅的消息id。

1

2

3

string[] topic = { "sensor/temp", "sensor/humidity" };

client.Unsubscribe(topics);

最后一个方法是出版()可以将消息发布到主题,指定主题本身和消息的数据字节。您还可以设置QoS级别参数(该参数具有默认值0)和REMENT标志,以便向发布消息时尚未连接的客户端传递消息。在这种情况下,代理保存消息,并在连接和订阅主题后立即将其发送给新客户端。

1

client.Publish("sensor/temp", Encoding.UTF8.GetBytes(temp)

M2Mqtt客户端库支持内部“inflight队列”异步执行所有发布请求(也可以订阅和取消订阅操作)。与上述特性相关的方法(出版()订阅()取消订阅())返回分配给发送给代理的MQTT消息的消息id。执行异步操作时,会引发相应的事件,事件ARGS包含有关消息id的信息,以便用户能够匹配它。

使用MqttClient相关推荐

  1. java,mqtt-client开发创建客户端

    使用Java 使用org.fusesource.mqtt-client 组件做Mqtt开发 大家可以在gitee或者Maven库网站上面找到对应的的Maven 引用 或者 Gradle 引用 GIte ...

  2. M2MQTT客户端MqttClient异常问题解决

    最近做一个物联网设备模拟器,C#+net4.5,采用M2Mqtt.Net.dll开发库,从VS2017工具nuget安装.服务器采用EMQ 2.3.11稳定版. 计划是一个c#winform应用程序, ...

  3. TencentOS-tiny+ESP8266+mqttclient对接腾讯云平台IoThub

    1. 硬件准备 本文中我准备的腾讯官方EVB_MX_Plus开发板和ESP8266 WIFI通信模组: 2. 云端产品创建 在云端创建产品的过程和下文相同,不再赘述. 小熊派移植TencentOS-t ...

  4. mqtt 发送消息过多_eclipse mqttclient 性能MQTT(32202): 正在发布过多的消息

    mqttclient性能&MQTT(32202): 正在发布过多的消息 org.eclipse.paho.client.mqttv3 2.2 GHz Intel Core i7 mac系统 p ...

  5. 使用MQTTClient.h库进行mqtt通讯【C语言】

    目录 MQTT 安装paho.mqtt.c库 安装依赖 安装 编译及运行 编译 运行 源代码 MQTT MQTT是一种轻量级物联网消息推送协议,使用MQTT开发物联网设备将会十分简单方便. 关于MQT ...

  6. C#使用MQTTnet的websocket加密方式(wss)实现MQTTClient

    Mqttnet库的功能还是很强大的,可以直接在vs的NuGet里面下载,注意要下载最新版本,有些只有MQTT 的TCP连接方式,因为这个原因我走了很多弯路. 网上使用MQTTnet的库的很多都是TCP ...

  7. 编写MQTTClient测试程序,和PC端运行的MQTT服务程序进行数据收发

    在实现了 MQTTClient 库与不同平台相关的代码之后,<实现ESP8266模块的socket接口,以提供MQTTClient库底层数据收发接口>这篇文章有介绍.就可以编写 MQTTC ...

  8. 关于android MqttClient消息推送客户端锁屏状态,无法发送心跳包解决方案

    1.客户端锁屏状态,无法发送心跳包 解决方案:使用电源锁 客户端:MqttService /** * 设备电源锁. */ private PowerManager.WakeLock mWakeLock ...

  9. 一个高性能、高稳定性的跨平台MQTT客户端——mqttclient设计与实现方式

    文章目录 mqttclient设计与实现方式 设计思想 API接口 MQTT客户端的核心结构 mqttclient实现 申请一个mqtt客户端 释放已申请的mqtt客户端 设置MQTT客户端的信息 连 ...

  10. mqttclient连接到OneNET云平台

    文章目录 mqttclient连接到OneNET云平台 使用OneNET 测试连接 手动安装相关的依赖包 拉取mqttclient仓库 简单介绍mqttclient仓库文件夹 编译 运行 代码 使用到 ...

最新文章

  1. 2021年春季学期-信号与系统-第三次作业参考答案-第一道题
  2. cannot import name 'get_all_providers'
  3. android线程间通信的几种方法_Android 技能图谱学习路线
  4. cambridge mphil in management result
  5. C#:System.Data.Common命名空间(数据库抽象工厂的使用)
  6. Java中interrupted()和isInterrupted()之间的区别
  7. java if else重构_java – 如何重构这个有多个if / else语句的方法
  8. python memoryview_memoryview的用法
  9. ipv6正则表达式 java,用正则表达式解析IPv4跟IPv6地址字符串
  10. 计算机基础与python安装
  11. centos7,关闭mysql。出现mysql启动不了的情况
  12. SQL数据导入mongodb
  13. 普中51开发板,用XPT2046芯片实现AD数模转换。protues仿真用ADC0808实现AD数模转化
  14. 华为太极magisk安装教程_Magisk 需要修复运行环境,缺失Magisk正常工作所需的文件...
  15. QT中使用ActiveX
  16. OpenGLGLUT入门学习
  17. 一分钟明白 VS manifest 原理
  18. layui xm-select用法
  19. 【Python刷题*计算客】A+B+C问题
  20. 求a和b的最大公约数

热门文章

  1. win7 win8 64位系统上装CAD2008挂燕秀外挂的办法
  2. vue axios封装及使用
  3. 各自然带代表植被_十种常见自然带所对应的植被 十种常见自然带所对应的气候类型...
  4. 武汉大学计算机学院程序大赛,“星网锐捷杯”华中区高校研究生程序设计大赛通知...
  5. abb机器人编程指令写字_ABB机器人-编程基本指令之运动指令
  6. 将excel或是csv文件中的矩阵相乘,输出点乘后的excel文件
  7. Python实现音频文件格式转化
  8. matlab中uigetfile命令的应用
  9. 计算机三级权限管理方法,Serv―U 三级用户权限机制及配置一例
  10. 机器学习之欠采样和过采样