connection refused: connect 端口没有占用_中国移动OneNet物联网平台使用心得(2)MQTT协议CONNECT连接平台...

69bfe1c9f2892efd40a8989b6540d399.png

大家好,超子又和大家见面了,超子我能力有限,技术不高,有什么错误的地方,欢迎板砖。今天我们一起构建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

密码:对应设备鉴权信息

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

3603d035b2caa5d6ce41993a9b8d93e5.png

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

00 06 33 32 32 30 34 39

784181dd64f158431cb674f650b8df02.png

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

9ae6c009b8526589223f6d74f0692035.png

上图中,我们可以看到设备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报文,看看设备是不是在线了。

3f63ec1b20147c58bf22e403016c0fae.png

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

1ec56b0d950ed9fbcc1cf8a13055c6e1.png

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

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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值