300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > mqtt 域名连接_中国移动OneNet物联网平台 如何使用MQTT协议 进行连接

mqtt 域名连接_中国移动OneNet物联网平台 如何使用MQTT协议 进行连接

时间:2023-12-03 04:22:06

相关推荐

mqtt 域名连接_中国移动OneNet物联网平台 如何使用MQTT协议 进行连接

大家好,超子又和大家见面了,超子我能力有限,技术不高,有什么错误的地方,欢迎板砖。今天我们一起构建MQTT协议中的CONNECT报文,连接OneNet物联网平台,然后进行通信。前面的文章中,超子介绍阿里云平台的时候详细分析了MQTT协议中的所有报文,所以这里就不再讲了,我们直接开始构建。

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

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

00 04 4D 51 54 54 04 C2 00 64

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

客户端ID:对应设备ID

用户名:对应产品ID

密码:对应设备鉴权信息

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

先看负载中的用户名,也就是产品ID。首先进入我们的开发者中心,然后进入我们的产品详情页面,点击左侧导航栏,选择产品概况,进入该页面后,就可以看到红圈中的产品ID了,长度6,我们把产品ID字符串322049换成16进制是0x33 0x32 0x32 0x30 0x34 0x39 ,我们还得加上两个字节表示长度6,最终的16进制,简化书写,去掉0x后的结果:

00 06 33 32 32 30 34 39

再看负载中的客户端ID和密码,也就是设备ID和设备的鉴权信息。左侧导航栏,选择设备列表,进入页面后,选择红圈中的详情,然后可以进入设备的详情页面 。

上图中,我们可以看到设备ID和设备的鉴权信息,它们分别对应负载中的客户端ID和密码。我们先构建客户端ID,把设备ID字符串586465703换成16进制是0x35 0x38 0x36 0x34 0x36 0x35 0x37 0x30 0x33,长度是9,我们在最前面加入2个字节表示长度9,最终的16进制,简化书写,去掉0x结果如下:

00 09 35 38 36 34 36 35 37 30 33

接着构建密码,密码对应鉴权信息,把字符串123456换成16进制是0x31 0x32 0x33 0x34 0x35 0x36,长度是6,我们在最前面加入2个字节表示长度6,最终的16进制,简化书写,去掉0x结果如下:

00 06 31 32 33 34 35 36

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

00 09 35 38 36 34 36 35 37 30 33 00 06 33 32 32 30 34 39 00 06 31 32 33 34 35 36

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

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

到此CONNECT报文构建完毕,我们用网络助手实测一下,OneNet平台提供的不是域名,是IP地址,端口号是6002,那么网络助手中,远程主机地址就是

183.230.40.39:6002

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

OneNet回复我们的CONNACK报文中,我们看最后1个字节是0x00,表示正确,说明我们的CONNECT报文正确。

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

今天我们就把CONNECT报文搞定了,接下来我们要实验一下平台的下发命令和数据上传。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。