2022
我们一起努力

百度云搭建服务器,基于百度云iot做产品

大家好,超子又和大家见面了,超子我能力有限,技术不高,有什么错误的地方,欢迎板砖。今天我们一起构建MQTT协议中的CONNECT报文连接百度的物联网平台,然后进行通信。废话不多说,直接构建报文。

在《轻松入门百度物联网平台,MQTT协议连接,后台如何建立项目和用户》一文中超子讲解了如何新建项目、用户、身份和策略,所以就用这篇文章中新建的项目来构建报文。

首先是CONNECT报文的固定报头是,0x10 ??,??号是剩余长度,我们需要确定了可变报头和负载后才能计算出剩余长度,所以剩余长度是待定的。

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

00 04 4D 51 54 54 04 C2 00 64

CONNECT报文中的负载部分包含了3个重要的消息,分别是客户端ID,用户名和密码,先总结下这3个信息对应于什么内容。

客户端ID:DeviceId-* *表示用户

用户名:用户名

密码:百度云分配的密钥

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

我们进入管理后台,项目列表中的testdemo,是我们建立的项目,点击进入项目管理界面。

红圈中所示的就是项目内的用户名,也就是CONNECT报文中负载部分的用户名。长度是12,按照MQTT协议格式的要求,我们还得加上两个字节表示长度12,最终的16进制,简化书写,去掉0x后的结果:

00 0C 67 70 31 34 62 64 65 2F 74 65 73 74

上图中,我们再看test,这个test是我们建立的用户,所以我们现在来看CONNECT报文中负载部分的客户端ID,应该是DeviceId-test,长度是13,按照MQTT协议格式的要求,我们还得加上两个字节表示长度13,最终的16进制,简化书写,去掉0x后的结果:

00 0D 44 65 76 69 63 65 49 64 2D 74 65 73 74

接着我们构建密码,密码对应百度云分配的密钥,上一篇文章中,我们介绍过,密钥只会显示一次,如果没有记住的话,就只能重新生成,所以这里我们点击身份列表,然后点击红圈中所示的重置密钥。

然后我们看到了密钥,我们把它复制下来,这个密钥就是CONNECT报文中负载部分的密码,数一数长度是16,按照MQTT协议格式的要求,我们还得加上两个字节表示长度16,最终的16进制,简化书写,去掉0x后的结果:

00 10 53 31 71 66 6F 58 6B 4B 66 4E 4F 55 35 6C 6E 63

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

00 0D 44 65 76 69 63 65 49 64 2D 74 65 73 74 00 0C 67 70 31 34 62 64 65 2F 74 65 73 74 00 10 53 31 71 66 6F 58 6B 4B 66 4E 4F 55 35 6C 6E 63

我们一起数一下,整个负载部分共计47字节 。然后我们可以计算剩余长度=可变报头+负载=10+47=57,57/128=0,一个字节就能搞定,换成16进制就是0x39,最后我们把固定报头、可变报头和负载同连接起来,简化16进制,去掉0x:

10 39 00 04 4D 51 54 54 04 C2 00 64 00 0D 44 65 76 69 63 65 49 64 2D 74 65 73 74 00 0C 67 70 31 34 62 64 65 2F 74 65 73 74 00 10 53 31 71 66 6F 58 6B 4B 66 4E 4F 55 35 6C 6E 63

到此MQTT协议中的整个CONNECT报文构建完毕,我们用网络助手实测一下。

我们回到项目列表页面,看红圈中所示的内容就是连接百度云物联网平台的域名和端口号,我的这个项目是:

gp14bde.mqtt.iot.gz.baidubce.com:1883

然后我们实际测试一下CONNECT报文,看看报文构建的是不是正确。

我们将CONNECT报文发送给百度云物联网平台服务器,然后服务器回复了我们CONNACK报文20 02 00 00,我们看最后1个字节是00,这就表示我们构建的CONNECT报文正确。

赞(0)
文章名称:《百度云搭建服务器,基于百度云iot做产品》
文章链接:https://www.fzvps.com/107796.html
本站文章来源于互联网,如有侵权,请联系管理删除,本站资源仅供个人学习交流,请于下载后24小时内删除,不允许用于商业用途,否则法律问题自行承担。
图片版权归属各自创作者所有,图片水印出于防止被无耻之徒盗取劳动成果的目的。

评论 抢沙发

评论前必须登录!