使用MQTT连接onenet云平台(一 connect)

本文详细介绍了MQTT报文的结构,包括固定报头、可变报头和有效载荷,并以连接云平台为例,展示了如何构造MQTT connect报文。重点讲解了连接标志、保持连接时间和客户端ID、用户名及密码的有效载荷设置。最后,通过TCPClient发送MQTT报文并验证了发送的成功。
摘要由CSDN通过智能技术生成

一.MQTT报文格式

MQTT是建立在TCP IP上的应用协议,按我的理解就是建立好TCP IP 连接后,按照MQTT的格式进行发送就可以。本次以connect为例子,查看如何连接云平台。

MQTT分为3部分固定报头+可变报文+有效负荷

1.1固定报头

可以看出固定包头包含两部分(2 byte):1.是控制报文的类型(16种)+控制报文类型的标志位,2是剩余长度。

1.1.1控制报文类型

 1.1.2控制报文标志位

 例子:1.综上我们使用connect,应为0001 0000,即:0x10

1.1.3剩余长度

剩余长度指的是可变报头+负载的数据。比较特殊的一点是,数据的长度采用类似于127进1的方法,需要尤其注意,可参考下图。

例子:1.综上我们使用connect,应为0001 0000,即:0x10

           2.剩余长度暂时设为 0x??

1.2可变报头

connect 报文分为:协议名,协议级别、连接标志、保持连接4部分

 1.2.1协议名

例子:

固定报头:

           1.综上我们使用connect,应为0001 0000,即:0x10

           2.剩余长度暂时设为 0x??

可变报头:

           1.前两位固定:0x00,0x04

           2.后面跟着MQTT(字符):4D 51 54 54 (可以使用网络调试助手字符转16进制)

1.2.2协议级别

例子:

固定报头:

           1.综上我们使用connect,应为0001 0000,即:0x10

           2.剩余长度暂时设为 0x??

可变报头:

           1.前两位固定:0x00,0x04

           2.后面跟着MQTT(字符):4D 51 54 54 (可以使用网络调试助手字符转16进制)

           3.协议级别:固定为4,0x04

1.2.3 连接标志

onenet、阿里、腾讯连接都需要3元素,需要账号、密码,5、4、3、2位为遗嘱设置先不考虑,1为清楚会话,设置为1,不保留数据。0位不能更改,只能是0.

例子:

固定报头:

           1.综上我们使用connect,应为0001 0000,即:0x10

           2.剩余长度暂时设为 0x??

可变报头:

           1.前两位固定:0x00,0x04

           2.后面跟着MQTT(字符):4D 51 54 54 (可以使用网络调试助手字符转16进制)

           3.协议级别:固定为4,0x04

           4.连接标志:1100,0010,即0xC2

1.2.4 保持连接

设置与服务器不通信可以保持多久连接,如果不发送数据,需要在保持连接时间内发送保活数据。 一般都是服务器的最大保持连接时间。这里设置2分钟,因为是2byte,所以为0x00,0x78

例子:

固定报头:

           1.综上我们使用connect,应为0001 0000,即:0x10

           2.剩余长度暂时设为 0x??

可变报头:

           1.前两位固定:0x00,0x04

           2.后面跟着MQTT(字符):4D 51 54 54 (可以使用网络调试助手字符转16进制)

           3.协议级别:固定为4,0x04

           4.连接标志:1100,0010,即0xC2

           5.保持连接:120秒,0x00,0x78

1.3有效载荷(payload)

1.3.1onenet参数

客户端ID:设备ID,即901505824

用户名:产品ID,即491644

密码:鉴权信息,即123456

 

1.3.2 有效载荷说明

发送3元信息使用UTF8格式 即在发送每一个信息之前都要加上发送数据的个数。

例子:

固定报头:

           1.综上我们使用connect,应为0001 0000,即:0x10

           2.剩余长度暂时设为 0x??

可变报头:

           1.前两位固定:0x00,0x04

           2.后面跟着MQTT(字符):4D 51 54 54 (可以使用网络调试助手字符转16进制)

           3.协议级别:固定为4,0x04

           4.连接标志:1100,0010,即0xC2

           5.保持连接:120秒,0x00,0x78

有效载荷

           1.客户端ID:00,09,39 30 31 35 30 35 38 32 34

           2.用户名: 00,06,34 39 31 36 34 34 

           3.密码:00,06,31 32 33 34 35 36 

至此就可以算出固定报头中的??,应该为00 04 4D 51 54 54 04 C2 00 78 00 09 39 30 31 35 30 35 38 32 34 00 06 34 39 31 36 34 34 00 06 31 32 33 34 35 36  个数之和,即37,0x25。

得出实际的例子:

固定报头:

           1.综上我们使用connect,应为0001 0000,即:0x10

           2.剩余长度暂时设为 0x25

可变报头:

           1.前两位固定:0x00,0x04

           2.后面跟着MQTT(字符):4D 51 54 54 (可以使用网络调试助手字符转16进制)

           3.协议级别:固定为4,0x04

           4.连接标志:1100,0010,即0xC2

           5.保持连接:120秒,0x00,0x78

有效载荷

           1.客户端ID:00,09,39 30 31 35 30 35 38 32 34

           2.用户名: 00,06,34 39 31 36 34 34 

           3.密码:00,06,31 32 33 34 35 36 

即10 25 00 04 4D 51 54 54 04 C2 00 78 00 09 39 30 31 35 30 35 38 32 34 00 06 34 39 31 36 34 34 00 06 31 32 33 34 35 36

二.MQTT报文发送测试

选择TCP Client, 远程主机:183.230.40.39:6002,

固定报头:10 25

可变报头:00 04 4D 51 54 54 04 C2 00 78

有效载荷:00 09 39 30 31 35 30 35 38 32 34 00 06 34 39 31 36 34 34 00 06 31 32 33 34 35 36

选择十六进制发送:10 25 00 04 4D 51 54 54 04 C2 00 78 00 09 39 30 31 35 30 35 38 32 34 00 06 34 39 31 36 34 34 00 06 31 32 33 34 35 36

可以看到发送成功!!!!!!!!!!!!!!!

  • 5
    点赞
  • 48
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

张楠0805

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值