plsql登录没有connect as_入门腾讯物联网开发平台,如何构建MQTT协议CONNECT报文

今天超子和大家一起构建一下MQTT协议中的CONNECT报文连接腾讯的物联网开发平台,只有CONNECT报文成功之后才能进行后面的通信。

我们直入主题,首先是CONNECT报文的固定报头0x10 ??,??是剩余长度,只有我们确定了可变报头和负载的长度后才能计算出来,所以一会再说。

CONNECT报文中的可变报头用来设置信息和各种功能,腾讯物联网平台和阿里云的一样,所以直接把阿里云的可变报头拿过来就行,简化的16进制书写,去掉0x,结果如下:

00 04 4D 51 54 54 04 C2 00 64

CONNECT报文中的负载包含客户端ID,用户名和密码这3个非常重要的信息,首先我们要总结下各个信息对应于腾讯云物联网平台的什么内容。

客户端ID:产品ID +设备名称

用户名:产品ID +设备名称+分号+ 21010406 +分号+78945 +分号+2147483647

密码:这个比较麻烦,需要先对设备秘钥进行base64解码,解码后的数据再作为密钥对用户名进行hmacsha1加密,加密后的密文就是MQTT协议CONNECT报文中负载的密码了

我们一起来找一下相关的信息在什么地方。

62faf365fc6715aa3ef19521c2758539.png

首先登录腾讯云物联网开发平台,超子在上一篇文章介绍了如何新建项目和产品。然后进入我们建立好的项目内,点击我们建立的产品。

《新手入门腾讯物联网开发平台,如何建立项目产品?简单详细上手快》

976baf54a35007ea580c2b3823493852.png

进入产品详情页后,我们选择第4步的设备调试,点击红圈中的新建设备,因为设备是连接平台的终端。

72bc8d09b33cb9a03a08f42088680aa4.png

我们给设备起一个名称就行,然后点击保存。

9d8bf267899630067a87c8d5065d68dd.png

设备建立成功后,在设备列表可以看到刚才建立的D001,然后我们点击设备,进入设备详情页面。

eed52d4d2923be4697081534304ae06e.png

上图中的3个信息,就是构建客户端ID,用户名和密码需要用到的内容。

先看客户端ID,结构是产品ID +设备名称,就是65NJZ04A1BD001,然后换成16进制是36 35 4E 4A 5A 30 34 41 31 42 44 30 30 31,长度是14,按照MQTT的格式要求,我们还要在最前面加入2个字节表示长度14,那么最终的16进制,简化书写,去掉0x结果如下:

00 0E 36 35 4E 4A 5A 30 34 41 31 42 44 30 30 31

接着构建用户名,产品ID +设备名称+分号+ 21010406 +分号+78945 +分号+2147483647,就是65NJZ04A1BD001;21010406;78945;2147483647,然后换成16进制是36 35 4E 4A 5A 30 34 41 31 42 44 30 30 31 3B 32 31 30 31 30 34 30 36 3B 37 38 39 34 35 3B 32 31 34 37 34 38 33 36 34 37,长度是40,然后按照MQTT的格式要求,我们还要在最前面加入2个字节表示长度40,那么最终的16进制,简化书写,去掉0x结果如下:

00 28 36 35 4E 4A 5A 30 34 41 31 42 44 30 30 31 3B 32 31 30 31 30 34 30 36 3B 37 38 39 34 35 3B 32 31 34 37 34 38 33 36 34 37

最后构建密码,先对ZmLVuCs4H/zX6E63+i2Ung==设备密钥进行base64解码,解码后换成16进制是66 62 D5 B8 2B 38 1F FC D7 E8 4E B7 FA 2D 94 9E,然后再作为密钥对用户名进行hmacsha1加密,加密后的结果,换成16进制是31 34 31 33 36 31 32 61 30 61 31 65 37 32 62 66 32 31 39 32 36 30 31 39 30 66 35 38 65 61 32 64 39 37 64 61 61 30 36 38 3B 68 6D 61 63 73 68 61 31,长度是49,我们还要在最前面加入2个字节表示长度49,那么最终的16进制,简化书写,去掉0x结果如下:

00 31 31 34 31 33 36 31 32 61 30 61 31 65 37 32 62 66 32 31 39 32 36 30 31 39 30 66 35 38 65 61 32 64 39 37 64 61 61 30 36 38 3B 68 6D 61 63 73 68 61 31

到此整个负载就搞定了,接下来我们把客户端ID+用户名+密码连接起来构成负载信息,简化16进制,去掉0x结果如下:

00 0E 36 35 4E 4A 5A 30 34 41 31 42 44 30 30 31 00 28 36 35 4E 4A 5A 30 34 41 31 42 44 30 30 31 3B 32 31 30 31 30 34 30 36 3B 37 38 39 34 35 3B 32 31 34 37 34 38 33 36 34 37 00 31 31 34 31 33 36 31 32 61 30 61 31 65 37 32 62 66 32 31 39 32 36 30 31 39 30 66 35 38 65 61 32 64 39 37 64 61 61 30 36 38 3B 68 6D 61 63 73 68 61 31

我们一起数一下,整个负载部分共计109个字节 。剩余长度=可变报头+负载=10+109=119,119/128=0,一个字节就能搞定,换成16进制就是0x77,最后我们把固定报头、可变报头和负载同连接起来,简化16进制,去掉0x的最终结果如下所示:

10 77 00 04 4D 51 54 54 04 C2 00 64 00 0E 36 35 4E 4A 5A 30 34 41 31 42 44 30 30 31 00 28 36 35 4E 4A 5A 30 34 41 31 42 44 30 30 31 3B 32 31 30 31 30 34 30 36 3B 37 38 39 34 35 3B 32 31 34 37 34 38 33 36 34 37 00 31 31 34 31 33 36 31 32 61 30 61 31 65 37 32 62 66 32 31 39 32 36 30 31 39 30 66 35 38 65 61 32 64 39 37 64 61 61 30 36 38 3B 68 6D 61 63 73 68 61 31

到此CONNECT报文构建完毕,我们用网络助手实测一下,腾讯云物联网开发平台提供的是域名,端口号是1883,那么网络助手中,远程主机地址就是

iotcloud-mqtt.gz.tencentdevices.com:1883

我们实际测试一下CONNECT报文,看看设备是不是在线了。

c3bc604e08aa7768ae7b7e88c8e8fff1.png

发送CONNECT报文后,服务器回复我们的CONNACK报文中,我们看最后1个字节是0x00,说明我们的CONNECT报文正确。

3bf6302d2a4f371958310a9f5c3eb1d0.png

CONNECT报文成功发送后,我们再看设备列表,对应的D001设备的状态已经显示在线了。CONNECT报文中我们设置的keep alive的时间是100s,按协议标准要求,1.5倍时间也就是150s内,没有数据发送的话,服务器可以把我们踢下来。如果我们没有什么数据要发送的话,可以通过发送PING报文,来保持连接,不被踢下来。

今天我们就把CONNECT报文搞定了,任务圆满完成。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值