精华内容
下载资源
问答
  • MQTT调试助手 MQTT资源管理 可看所有的主题,订阅消息 发布消息
  • 最新版MQTT调试助手 MQTT 最新1.0 版本
  • 最新版MQTT调试助手 MQTT 0.6版本 需要java环境
  • 在连接成功后调试助手会显示服务器发送的连接成功的消息20 02 00 00,然后我们在发送我们刚刚算好的订阅消息报文: 82 35 00 0A 00 30 2F 73 79 73 2F 61 31 30 7A 77 6B 55 78 51 55 53 2F ...

    点击上方“果果小师弟”,选择“置顶/星标公众号

    干货福利,第一时间送达!

    315f58c13c4d970bc291b96a651d31d8.gif

    订阅主题指的是客户端向服务端订阅,服务端知道了客户端订阅后会返回一个信号告诉客户端我知道了—这个叫订阅确认。再给举一个例子,比如我的微博是客户端,一个明星的微博是服务端,我关注了这个明星,也就是说我订阅了他,那么这个明星只要在微博上发了一些信息的话,马上就可以推送给我。订阅主题,英文单词Subscribe,之前在讲connect控制报文的时候,connect控制报文是由固定报头,可变报头和有效整合三部分组成。那么基本上咱们在mqtt所有的报文都是由这三部分组成。你可以把它当作一个框架,再强调一下订阅报文是客户端向服务端订阅。那么订阅报文具体有什么作用呢?如果客户端向服务端发送了订阅请求以后,服务端就会发送publish报文给客户端,subscribe报文指定了最大的QoS等级。跟前面一样,mqtt几乎所有的报文都是由固定报头+可变报头+有效载荷组成。

    1.固定报头

    66741a9db797c4152804c57d5bb04301.png

    2.可变报头

    bfa4c556a42aba4654a4fe3b2e085fbe.png

    3.有效载荷

    b68f5a56b5a8db30e3a9f4b8c6be8b38.png
    订阅主题:
    主题: /sys/a10zwkUxQUS/LY-1/thing/service/property/set

    相应的16进制:

    • 2F 73 79 73 2F 61 31 30 7A 77 6B 55 78 51 55 53 2F 4C 59 2D 31 2F 74 68 69 6E 67 2F 73 65 72 76 69 63 65 2F 70 72 6F 70 65 72 74 79 2F 73 65 74  
      共48个(0x30)
      也就是00 30 2F 73 79 73 2F 61 31 30 7A 77 6B 55 78 51 55 53 2F 4C 59 2D 31 2F 74 68 69 6E 67 2F 73 65 72 76 69 63 65 2F 70 72 6F 70 65 72 74 79 2F 73 65 74

    • 后面加00(QoS等级)
      00 30 2F 73 79 73 2F 61 31 30 7A 77 6B 55 78 51 55 53 2F 4C 59 2D 31 2F 74 68 69 6E 67 2F 73 65 72 76 69 63 65 2F 70 72 6F 70 65 72 74 79 2F 73 65 74 00

    • 加上固定报头82 ?? 和可变报头00 0A82 ?? 00 0A 00 30 2F 73 79 73 2F 61 31 30 7A 77 6B 55 78 51 55 53 2F 4C 59 2D 31 2F 74 68 69 6E 67 2F 73 65 72 76 69 63 65 2F 70 72 6F 70 65 72 74 79 2F 73 65 74 00
      得到??为53(0x35)

    • 最终为:82 35 00 0A 00 30 2F 73 79 73 2F 61 31 30 7A 77 6B 55 78 51 55 53 2F 4C 59 2D 31 2F 74 68 69 6E 67 2F 73 65 72 76 69 63 65 2F 70 72 6F 70 65 72 74 79 2F 73 65 74 00

    现在我们通过网络调试助手来向阿里云服务端订阅主题
    1.第一步向服务端发送connect报文确认是否连接成功,这一步和上一讲的操作相同

    25f80175ea7f15dc6f87b354455dbe24.png
    2.在连接成功后调试助手会显示服务器发送的连接成功的消息20 02 00 00,然后我们在发送我们刚刚算好的订阅消息报文:

    82 35 00 000 30 2F 73 79 73 2F 61 31 30 777 6B 55 78 51 55 53 2F 459 231 2F 74 68 69 667 2F 73 65 72 76 69 63 65 2F 70 72 6F 70 65 72 74 79 2F 73 65 74 00

    服务端会返回一个90 03 00 0A 10确认订阅。当然如果你发送的订阅消息是错误的话,服务端返回的是90 03 00 0A 80,同时你的网络调试助手马上会断开。这时候你就要回去好好检查一下你的订阅报文是否计算的正确,直到服务器返回正确的回应才可以。

    d031f083a4e11e80813193f461829214.png

    订阅确认

    上面我们说在我们发送订阅报文之后服务器会马上返回订阅确认的消息:90 03 00 0A 10,那么为啥服务器返回的的是这几个值而不是其他的值呢?为啥返回了90 03 00 0A 10我们就知道订阅成功了呢?这就需要我们了解一下订阅确认的报文是怎么组成的。
    同样,订阅确认的报文也由固定报头、可变报头、有效载荷组成的。

    29209404f6f7edfb2ed2e5f8fc84c334.png

    1.固定报头

    fb81ba72682ef4a169ffa2d3f629860b.png

    2.可变报头

    681650d6838ece88041fe08437211a78.png

    3.有效载荷

    4cb387fe76737075a42270455a075964.png

    4.最终得到订阅确认的报文

    71d3f2bb23c95128fa050a9b304a9ae1.png
      知道了订阅确认报文的组成部分现在应该明白了为啥返回的订阅确认消息是90 03 00 0A 10了吧,哈哈。是不是感觉很奇妙!

    5.程序设计

    /*-------------------------------------*//*函数名:SUBSCRIBE订阅topic报文         *//*参  数:QoS:订阅等级                  *//*参  数:topic_name:订阅topic报文名称  *//*返回值:无                            *//*-------------------------------------*/void MQTT_Subscribe(char *topic_name, int QoS){    
        Fixed_len = 2;                              //SUBSCRIBE报文中,固定报头长度=2  80+??
        Variable_len = 2;                           //SUBSCRIBE报文中,可变报头长度=2  00+0A
        Payload_len = 2 + strlen(topic_name) + 1;   //计算有效负荷长度 = 2字节(topic_name长度)+ topic_name字符串的长度 + 1字节服务等级00
        temp_buff[0]=0x82;                                    //第1个字节 :固定0x82                      
        temp_buff[1]=Variable_len + Payload_len;              //第2个字节 :可变报头+有效负荷的长度 
        temp_buff[2]=0x00;                                    //第3个字节 :报文标识符高字节,固定使用0x00
        temp_buff[3]=0x01;                                    //第4个字节 :报文标识符低字节,固定使用0x01
        temp_buff[4]=strlen(topic_name)/256;                  //第5个字节 :topic_name长度高字节
        temp_buff[5]=strlen(topic_name)%256;                  //第6个字节 :topic_name长度低字节memcpy(&temp_buff[6],topic_name,strlen(topic_name));  //第7个字节开始 :复制过来topic_name字串       
        temp_buff[6+strlen(topic_name)]=QoS;                  //最后1个字节:订阅等级
        TxDataBuf_Deal(temp_buff, Fixed_len + Variable_len + Payload_len);  //加入发送数据缓冲区
    }

    ENDe581db9b2d6b96efc0c2eef35f3fc9d4.gif

    如果觉得文章对你有帮助,欢迎转发、留言、点赞、分享给你的朋友,感谢您的支持!5ef932b33319a7a9fb9c0cba2402f2dc.png

    写留言

    展开全文
  • 新建一个终端:  mosquitto -c /root/mosquitto-1.4.5/mosquitto.conf -d 启动 查看来往消息。 新建一个终端: mosquitto_sub -t device_ACCF23B49618 订阅 订阅消息 新建一个终端  mosquitto_pub -h ...


    新建一个终端:

     mosquitto -c /root/mosquitto-1.4.5/mosquitto.conf -d 启动

    查看来往消息。

    新建一个终端:

    mosquitto_sub -t device_ACCF23B49618     订阅   

    订阅消息

    新建一个终端

     mosquitto_pub -h localhost -t device_ACCF23B49618 -m "hello world."  发送消息


     mosquitto -c /root/mosquitto-1.4.5/mosquitto.conf -v 打印更为详细的信息,全部log打印出来。



    https://www.nginx.com/blog/ip-transparency-direct-server-return-nginx-plus-transparent-proxy/   相关记录








    展开全文
  • MQTT协议系列文章:物联网--MQTT协议(一):MQTT协议简介物联网--MQTT协议(二):MQTT协议组成介绍物联网--MQTT协议(三):MQTT协议服务等级介绍物联网--MQTT协议(四):构建CONNECT报文物联网--MQTT协议(五):构建...

    1508c2d9ed00bd7050fec54db3444f44.gifMQTT协议系列文章:

    物联网--MQTT协议(一):MQTT协议简介

    物联网--MQTT协议(二):MQTT协议组成介绍

    物联网--MQTT协议(三):MQTT协议服务等级介绍

    物联网--MQTT协议(四):构建CONNECT报文

    物联网--MQTT协议(五):构建CONNACK、DISCONNECT报文

    物联网--MQTT协议(六):构建PINGREQ、PINGRESP报文

    物联网--MQTT协议(七):构建SUBSCRIBE、SUBACK报文

    物联网--MQTT协议(八):构建UNSUBSCRIBE、UNSUBACK报文

    前面写了8篇MQTT协议的文章后,断更了,今天继续更,争取早日完结该系列

    MQTT协议共14个报文,前面给大家讲解了怎么构建 CONNECT、CONNACK、DISCONNECT、PINGREQ、PINGRESP、SUBSCRIBE、SUBACK、UNSUBSCRIBE、UNSUBACK 报文,今天继续给大家讲解构建 PUBLISH(发布消息)报文

    一、准备工作

    1.阿里云创建设备

    已在阿里云上创建了一个设备,设备三元组为:

      {
         "ProductKey""a1GOQO9ZBek",
         "DeviceName""191106",
         "DeviceSecret""wWo0xItypjQzrJQFlLpiITBjOGJhSLWE"
      }

    2.网络调试助手的使用

    MQTT协议的所有报文均是16进制表示,故需要进制转换,进制转换工具可以直接使用网络调试助手,即可转换为16进制,并得到转换数据的大小,操作如下:

    399c076864e548b1891bbcc82a0259f1.pnga0c2d059182d6b52d02d00bc03bf6fab.png

    • 输入需要转换的数据时,结束的地方不能多有空格,否则转换过后的数据也会包含空格,导致出错

    • 发送完成一次数据之后记得复位计数(右下角),且把按十六进制发送的√取消掉再进行下一次数据转换,否则会数据累加,导致出错

    3.阿里云产品添加功能定义

    登录阿里云物联网平台,找到本项目创建的产品,进入产品详情界面

    781403de0a46a4ba7d1eef56f0b699f0.png

    根据自己需求添加产品功能(此处若我们选择上传当前的室内人数,可自己定义)

    8c7b431f116ca2a9f860eb41edaa72bc.png

    完成之后确认,点击发布上线,即可在页面上看到我们刚添加的产品功能

    093e1de00e629819ad7ea69c2a818f08.png

    4.获取设备的发布主题

    登录阿里云物联网平台,找到本项目创建的产品,进入产品详情界面

    80c7ad348531eeabb9335bdea0762f96.png

    将 /sys/a1GOQO9ZBek/{deviceName} 修改为我们本次项目创建的设备,即得到设备的发布主题:/sys/a1GOQO9ZBek/191106/thing/event/property/post

    二、PUBLISH(发布消息)报文

    PUBLISH(发布消息)报文就是指从客户端向服务端或者服务端向客户端传输一个应用消息,PUBLISH 报文由固定报头、可变报头、有限负载组成。本节将在已连接上阿里云的基础上通过PUBLISH发送数据到阿里云。

    1.固定报头

    MQTT协议的 PUBLISH 报文的固定报头数据如下:

    2e14c3fab001c6ba526b26da13f79848.png

    MQTT协议规定,对于 QoS0 的消息, DUP 标志必须设置为 0,此处我们发送的数据为 QoS 0的服务器消息,故QoS及DUP均为0,设置RETAIN(保留标志位)为0,服务端不存储这个消息也不移除或替换任何现存的保留消息,剩余长度的值暂定为:XX

    MQTT协议的 PUBLISH 报文固定报头为:30 XX

    2.可变报头

    MQTT协议的 PUBLISH 报文的可变报头按顺序包含主题名和报文标识符

    MQTT协议手册给的一个案例(示例中的主题名为 “a/b”, 长度等于 3, 报文标识符为 “10”):

    b14ce7c2f209b24aba0e25636406dbe0.png

    主题名(Topic Name) 用于识别有效载荷数据应该被发布到哪一个信息通道,即云端的设备发布主题,根据

    而对于报文标识符,MQTT协议规定,只有当 QoS 等级是 1 或 2 时,报文标识符(Packet Identifier) 字段才能出现在 PUBLISH 报文中,故我们的可变报头中只包含主题名

    设备的发布主题为:/sys/a1GOQO9ZBek/191106/thing/event/property/post,转换为16进制为:2F 73 79 73 2F 61 31 47 4F 51 4F 39 5A 42 65 6B 2F 31 39 31 31 30 36 2F 74 68 69 6E 67 2F 65 76 65 6E 74 2F 70 72 6F 70 65 72 74 79 2F 70 6F 73 74,长度为49个字节,将49转换为16进制为31

    得到MQTT协议的 PUBLISH 报文可变报头为:00 31 2F 73 79 73 2F 61 31 47 4F 51 4F 39 5A 42 65 6B 2F 31 39 31 31 30 36 2F 74 68 69 6E 67 2F 65 76 65 6E 74 2F 70 72 6F 70 65 72 74 79 2F 70 6F 73 74

    3.解析云端下发数据

    MQTT协议的 PUBLISH 报文的有效载荷包含将被发布的应用消息,数据的内容和格式是应用特定的。由于我们不知道阿里云发送数据的具体格式,故我们可以通过参考阿里云下发的数据格式,从而得到发送数据到阿里云的有效载荷格式

    使用网络调试助手,在通过CONNECT报文连接上阿里云之后,用SUBSCRIBE报文订阅服务器的主题topic,就能收到从服务器下发的数据

    • CONNECT报文连接上阿里云
    • SUBSCRIBE报文订阅服务器主题
    • 阿里云下发数据
    ea11b2265668ed0a324e98663cdbc1eb.png
    d865077844d11b342207706db16d77dd.png

    从网络调试助手看到,接收到的服务器下发的数据为:30 90 01 00 32 2F 73 79 73 2F 61 31 47 4F 51 4F 39 5A 42 65 6B 2F 31 39 31 31 30 36 2F 74 68 69 6E 67 2F 73 65 72 76 69 63 65 2F 70 72 6F 70 65 72 74 79 2F 73 65 74 7B 22 6D 65 74 68 6F 64 22 3A 22 74 68 69 6E 67 2E 73 65 72 76 69 63 65 2E 70 72 6F 70 65 72 74 79 2E 73 65 74 22 2C 22 69 64 22 3A 22 38 35 31 35 37 36 38 37 22 2C 22 70 61 72 61 6D 73 22 3A 7B 22 6E 75 6D 22 3A 36 7D 2C 22 76 65 72 73 69 6F 6E 22 3A 22 31 2E 30 2E 30 22 7D

    • 根据MQTT协议,对这一长串的16进制数进行解析,计算得到长度为147,除去固定报头之后长度大于127,根据MQTT协议的 剩余长度字段大小的表示方法,知道大于长度127的字段用两个字节表示
    ba97acc680db902b0b9fc484d4cd2d82.png
    • 故该数据的固定报头为:30 90 01

    • 00 32 为可变报头的长度,32转换为10进制为50,说明可变报头有50个字节,从00 32开始,取50个字节数据,得到该数据可变报头:2F 73 79 73 2F 61 31 47 4F 51 4F 39 5A 42 65 6B 2F 31 39 31 31 30 36 2F 74 68 69 6E 67 2F 73 65 72 76 69 63 65 2F 70 72 6F 70 65 72 74 79 2F 73 65 74 7B 22 6D 65 74,通过网络调试助手转换为字符:/sys/a1GOQO9ZBek/191106/thing/service/property/set,即是使用SUBSCRIBE报文订阅的主题

    • 除去固定报头,可变报头,剩下部分即为有效载荷:7B 22 6D 65 68 6F 64 22 3A 22 74 68 69 6E 67 2E 73 65 72 76 69 63 65 2E 70 72 6F 70 65 72 74 79 2E 73 65 74 22 2C 22 69 64 22 3A 22 38 35 31 35 37 36 38 37 22 2C 22 70 61 72 61 6D 73 22 3A 7B 22 6E 75 6D 22 3A 36 7D 2C 22 76 65 72 73 69 6F 6E 22 3A 22 31 2E 30 2E 30 22 7D,通过网络调试助手转换为字符格式:{"mehod":"thing.service.property.set","id":"85157687","params":{"num":6},"version":"1.0.0"},该字符串即为发送数据到阿里云的有效载荷格式,我们只需要将{"num":6}里面的标识符和值更换为我们所需要传输的数据

    3.有效负载

    MQTT协议的 PUBLISH 报文的有效载荷包含将被发布的应用消息,根据上文,有效载荷的格式为:{"mehod":"thing.service.property.set","id":"85157687","params":{"num":6},"version":"1.0.0"}

    假设我们需要传输的数据标识符为num,值为99,则有效载荷为:{"mehod":"thing.service.property.set","id":"85157687","params":{"num":99},"version":"1.0.0"}

    将有效载荷转换为16进制,即可得到MQTT协议的 PUBLISH 报文的有效载荷:7B 22 6D 65 68 6F 64 22 3A 22 74 68 69 6E 67 2E 73 65 72 76 69 63 65 2E 70 72 6F 70 65 72 74 79 2E 73 65 74 22 2C 22 69 64 22 3A 22 38 35 31 35 37 36 38 37 22 2C 22 70 61 72 61 6D 73 22 3A 7B 22 6E 75 6D 22 3A 39 39 7D 2C 22 76 65 72 73 69 6F 6E 22 3A 22 31 2E 30 2E 30 22 7D

    4.计算剩余长度

    根据上文,得到构造的PUBLISH 报文:30 XX 00 31 2F 73 79 73 2F 61 31 47 4F 51 4F 39 5A 42 65 6B 2F 31 39 31 31 30 36 2F 74 68 69 6E 67 2F 65 76 65 6E 74 2F 70 72 6F 70 65 72 74 79 2F 70 6F 73 74 7B 22 6D 65 68 6F 64 22 3A 22 74 68 69 6E 67 2E 73 65 72 76 69 63 65 2E 70 72 6F 70 65 72 74 79 2E 73 65 74 22 2C 22 69 64 22 3A 22 38 35 31 35 37 36 38 37 22 2C 22 70 61 72 61 6D 73 22 3A 7B 22 6E 75 6D 22 3A 39 39 7D 2C 22 76 65 72 73 69 6F 6E 22 3A 22 31 2E 30 2E 30 22 7D (XX表示剩余长度)

    计算XX后面数据的字节大小,共占143个字节,大于128个字节,根据MQTT协议的 剩余长度字段大小的表示方法,应该用两个字节表示剩余长度字段大小,143减128为15,将15转换为16进制为0F(0000 1111),根据协议规定的剩余长度字段大小表示法,剩余长度的大小为8F 01(1000 1111 0000 0001)

    故完整的PUBLISH 报文为:30 8F 01 00 31 2F 73 79 73 2F 61 31 47 4F 51 4F 39 5A 42 65 6B 2F 31 39 31 31 30 36 2F 74 68 69 6E 67 2F 65 76 65 6E 74 2F 70 72 6F 70 65 72 74 79 2F 70 6F 73 74 7B 22 6D 65 68 6F 64 22 3A 22 74 68 69 6E 67 2E 73 65 72 76 69 63 65 2E 70 72 6F 70 65 72 74 79 2E 73 65 74 22 2C 22 69 64 22 3A 22 38 35 31 35 37 36 38 37 22 2C 22 70 61 72 61 6D 73 22 3A 7B 22 6E 75 6D 22 3A 39 39 7D 2C 22 76 65 72 73 69 6F 6E 22 3A 22 31 2E 30 2E 30 22 7D

    四、测试报文

    网络调试助手中发送 物联网--MQTT协议(四):构建CONNECT报文构建 中构建好的CONECT报文,可以看到返回:20 02 00 00,说明CONNECT连接被服务端接受,连接上云端设备,再发送构建好的PUBLISH报文,若TCP Client没有断开连接,则证明构建的报文没有错误

    19ed2b045fb79e6b3025c21ade4f74f4.png

    在阿里云物联网平台设备详情界面能看到网络调试助手发送的数据49e87652572bdeefc52082e1dc8ff782.png

    79f232c0865056dd3a7b1e3d3745ac20.gif

    笔者知识有限,如果发现本文有错误的地方欢迎批评、指正,若本文对您有所帮助,转发、分享也是笔者坚持的动力

    8289759b9c072e3542c929646cfa09bb.gif
    展开全文
  • MQTT协议系列文章:物联网--MQTT协议(一):MQTT协议简介物联网--MQTT协议(二):MQTT协议组成介绍物联网--MQTT协议(三):MQTT协议服务等级介绍物联网--MQTT协议(四):构建CONNECT报文物联网--MQTT协议(五):构建...

    10efde11560b5ed2d19020807ef2b372.gifMQTT协议系列文章:

    物联网--MQTT协议(一):MQTT协议简介

    物联网--MQTT协议(二):MQTT协议组成介绍

    物联网--MQTT协议(三):MQTT协议服务等级介绍

    物联网--MQTT协议(四):构建CONNECT报文

    物联网--MQTT协议(五):构建CONNACK、DISCONNECT报文

    物联网--MQTT协议(六):构建PINGREQ、PINGRESP报文

    物联网--MQTT协议(七):构建SUBSCRIBE、SUBACK报文

    物联网--MQTT协议(八):构建UNSUBSCRIBE、UNSUBACK报文

    物联网--MQTT协议(九):构建PUBLISH报文

    MQTT协议共14个报文,前面给大家讲解了怎么构建 CONNECT、CONNACK、DISCONNECT、PINGREQ、PINGRESP、SUBSCRIBE、SUBACK、UNSUBSCRIBE、UNSUBACK、PUBLISH报文,今天继续给大家讲解构建 PUBACK (发布收到)报文

    一、准备工作

    1.阿里云创建设备

    已在阿里云上创建了一个设备,设备三元组为:

      {
         "ProductKey""a1GOQO9ZBek",
         "DeviceName""191106",
         "DeviceSecret""wWo0xItypjQzrJQFlLpiITBjOGJhSLWE"
      }

    2.网络调试助手的使用

    MQTT协议的所有报文均是16进制表示,故需要进制转换,进制转换工具可以直接使用网络调试助手,即可转换为16进制,并得到转换数据的大小,操作如下:

    d19ab10235765415f4dbb91db6411483.png5588f5cfece93824d6d3d138dc5452fc.png

    • 输入需要转换的数据时,结束的地方不能多有空格,否则转换过后的数据也会包含空格,导致出错

    • 发送完成一次数据之后记得复位计数(右下角),且把按十六进制发送的√取消掉再进行下一次数据转换,否则会数据累加,导致出错

    二、PUBACK (发布收到)报文

    PUBACK 报文是对 QoS 1 等级的 PUBLISH 报文的响应,即只有当PUBLISH发布QoS 1 等级的消息时,服务器才会发出对应的响应报文

    1.固定报头

    根据MQTT协议手册说明,MQTT协议的 PUBACK 报文的固定报头数据如下:

    2e7d3937ec2620fea5216e1adbd02803.png983c39dd6f82e1ff67e5b3c39d70aed5.png

    MQTT协议的 PUBACK 报文的固定报头为:40 02

    2.可变报头

    根据MQTT协议手册说明,MQTT协议的 PUBACK 报文的可变报头如下:

    b0d4e5040918a86806399f9c46d5ca72.png

    MQTT协议的 PUBACK 报文的可变报头为包含等待确认的 PUBLISH 报文的报文标识符,PUBLISH 报文的报文标识符即类似我们的身份证一样,如其名字一样,起到标识的作用,我们可以自定义PUBLISH 报文的报文标识符

    2.有效载荷

    根据MQTT协议手册说明,PUBACK 报文没有有效载荷

    四、测试报文

    1.构建QoS 1的PUBLISH 报文

    PUBACK 报文是对 QoS 1 等级的 PUBLISH 报文的响应,故需要构造一个QoS 1 等级的 PUBLISH 报文,有构造QoS 0的PUBLISH 报文基础,在构建好的报文基础上,做简单修改即可得到QoS 1的PUBLISH 报文

    在 物联网--MQTT协议(九):构建PUBLISH报文 中构建的QoS 0的PUBLISH 报文为:30 8F 01 00 31 2F 73 79 73 2F 61 31 47 4F 51 4F 39 5A 42 65 6B 2F 31 39 31 31 30 36 2F 74 68 69 6E 67 2F 65 76 65 6E 74 2F 70 72 6F 70 65 72 74 79 2F 70 6F 73 74 7B 22 6D 65 68 6F 64 22 3A 22 74 68 69 6E 67 2E 73 65 72 76 69 63 65 2E 70 72 6F 70 65 72 74 79 2E 73 65 74 22 2C 22 69 64 22 3A 22 38 35 31 35 37 36 38 37 22 2C 22 70 61 72 61 6D 73 22 3A 7B 22 6E 75 6D 22 3A 39 39 7D 2C 22 76 65 72 73 69 6F 6E 22 3A 22 31 2E 30 2E 30 22 7D

    根据MQTT协议手册,从QoS 0的PUBLISH 报文变更为QoS 1的PUBLISH 报文只需更改三个地方

    • QoS 1的PUBLISH 报文固定报头为 32,将QoS 0的PUBLISH 报文中的首字节30改为32

    • QoS 1的PUBLISH 报文相比QoS 0的PUBLISH 报文在主题名之后增加了报文标识符,报文标识符占2个字节,假定该条报文的报文标识符为 00 01(注意:虽然可变报头添加了2个字节的报文标识符,但可变报头的长度不用更改,即此处报文标识符不计算入可变报头的字段大小)

    • 重新计算剩余长度,由于添加了2个字节的报文标识符,故QoS 1的PUBLISH 报文相比QoS 0的PUBLISH 报文剩余长度多了2个字节,所以剩余长度由由8F 01变为91 01

    通过上面三步,得到QoS 1的PUBLISH 报文:32 91 01 00 31 2F 73 79 73 2F 61 31 47 4F 51 4F 39 5A 42 65 6B 2F 31 39 31 31 30 36 2F 74 68 69 6E 67 2F 65 76 65 6E 74 2F 70 72 6F 70 65 72 74 79 2F 70 6F 73 74 00 01 7B 22 6D 65 68 6F 64 22 3A 22 74 68 69 6E 67 2E 73 65 72 76 69 63 65 2E 70 72 6F 70 65 72 74 79 2E 73 65 74 22 2C 22 69 64 22 3A 22 38 35 31 35 37 36 38 37 22 2C 22 70 61 72 61 6D 73 22 3A 7B 22 6E 75 6D 22 3A 39 39 7D 2C 22 76 65 72 73 69 6F 6E 22 3A 22 31 2E 30 2E 30 22 7D

    2.测试PUBACK报文

    使用网络调试助手,发送CONNECT报文,再发送构建的QoS 1的PUBLISH 报文

    50f7c15f091f6e5bc9bdd0b0cfbcd274.png

    网络调试助手接收到的服务器响应报文:40 02 00 01 ,其中40 02为PUBACK 报文的固定报头,00 01为QoS 1的PUBLISH 报文的报文标识符

    到本节为止,分别介绍了构造CONNECT、CONNACK、DISCONNECT、PINGREQ、PINGRESP、SUBSCRIBE、SUBACK、UNSUBSCRIBE、UNSUBACK、PUBLISH、 PUBACK共11个报文

    剩下的PUBREC(发布收到,QoS 2支持)、PUBREL(发布释放,QoS 2支持)、PUBCOMP(发布完成,QoS 2支持)共3个报文由于阿里云不支持,故不再做介绍,有兴趣可以用其他支持的服务器做测试,相信看完这11个报文的构建过程,对MQTT报文构建的步骤操作也是行云流水了

    本系列MQTT协议解析、报文构造到这就结束了,由于知识量有限,若有错误的地方恳请大家指正,共同进步

    39de80e739f169fa7ab0f9cb9f00f3e2.gif

    笔者知识有限,如果发现本文有错误的地方欢迎批评、指正,若本文对您有所帮助,转发、分享也是笔者坚持的动力

    8c3250d91dd66bd9a46b28d705db1775.gif
    展开全文
  • 一、下载网页实现MQTT的js包 1、从<官网>按照如下图所示步骤下载MQTT的JS包 2、直接从我的云盘获取 链接:https://pan.baidu.com/s/1iTcSBmM_J4ZI9OK58qfe3w 提取码:d92l 复制这段内容后打开百度网盘...
  • 今天我们一起构建MQTT协议中的CONNECT报文连接Tlink物联网平台。在前面的文章《Tlink物联网平台使用心得(1)建立产品和设备》中,超子介绍了Tlink平台如何建立设备组和设备,以及传感器的相关设置,这些内容需要大家...
  • 今天我们测试一下tlink物联网平台MQTT协议下发命令的功能,也就是分析一下服务器推送的PUBLISH报文命令。开关设备首先我们进入控制台内的设备管理页面,我们用开关设备测试命令下发功能,使用MQTT协议,接收命令推送...
  • 我们需要用网络调试助手软件,实际测试一下,一定要注意先发CONNECT报文之后再发我们的PUBLISH报文。 我们首先发送CONNECT报文,成功后,发送PUBLISH报文,因为是等级0,所以服务器不会有什么回复,我们需要到后台看...
  • 通过上一篇文章《阿里云物联网平台使用心得(27)MQTT协议服务等级0的PUBLISH报文》,我们了解到PUBLISH 服务等级1和等级0的报文主要有两点区别:(1)固定报头中Bit1、Bit2和 Bit3不同(2)等级1的可变报头多两个字节的...
  • 我们需要用网络调试助手软件,实际测试一下,一定要注意先发CONNECT报文之后再发我们的PUBLISH报文。 我们首先发送CONNECT报文,成功后,发送PUBLISH报文,因为是等级0,所以服务器不会有什么回复,我们需要到后台看...
  • client = new Paho.MQTT.Client(document.getElementById("ip").value, Number(document.getElementById("port").value), "clientId");// Create a client instance // set callback handlers client....
  • 我还是先睡觉吧,,因为我刚想到,做页面需要先写DIV的 然后再写具体MQTT的.....需要两篇...我先洗洗睡... 咱先不管布局..先直接这样写       <!DOCTYPE html> " en " > " UTF-8 " > <title>...
  • mqtt客户端调试助手,mqttfx-1.7.1 For Win7,32位程序,windows平台版本。
  • 介绍用网络调试助手模拟MQTT协议连接百度物联网,进而分析MQTT协议。方便移植到单片机或其他芯片内。工具:网络调试助手(NetAssist.exe 或其他)打开网络调试助手,协议类型选择Tcp client远程主机地址 填入112.34....
  • 尝试下网络调试助手发送到阿里云,有问题的同学,可以去blibli看下视频,挺详细的。 1、MQTT的数据传输格式 2、使用的工具为网络调试助手 野人的,看来还是很不错的 http://www.cmsoft.cn 3、服务器地址 ...
  • 制作一个基于MQTT协议简易的网络调试助手(AndroidStudio编译) MQTT库在GitHub的地址:https://github.com/eclipse/paho.mqtt.android.git 添加MQTT库 第一步:找到项目目录下的gradle文件,添加以下代码 ...
  • 连接上后下面有调试信息。如下: 显示在线状态 4.发送一个数据到平台上 发送后平台显示出来 用网络助手进行设备上线,上传数据操作。 看MQTT发送的数据,这个数据是设备上线的数据。为 10 26 00 04 4D 51 54 ...
  • 物联网开发笔记——使用网络调试助手连接阿里云物联网平台(基于MQTT协议) 其实作者本意是使用4G模块来实现与阿里云物联网平台的连接过程,但是由于自己用的4G模块自身的限制,使得阿里云连接总是无法建立,已经...
  • MQTT-Client.7z

    2019-11-08 17:05:42
    MQTT调试助手,软件源码和效果图详见博客:https://blog.csdn.net/qq153471503/article/details/102976431

空空如也

空空如也

1 2 3 4 5
收藏数 86
精华内容 34
关键字:

mqtt调试助手