美文网首页Mqtt
MQTT消息格式之SUBACK消息分析

MQTT消息格式之SUBACK消息分析

作者: samychen | 来源:发表于2017-05-19 00:43 被阅读0次

在上一节中(MQTT消息格式之SUBSCRIBE(消息订阅)消息分析),客户端发送了订阅的消息,这个时候,服务器端收到订阅主题的MQTT消息之后,肯定需要给一个应答,这个应答信息就是SUBACK(消息订阅应答)。消息订阅应答相对来说比较简单。

1.运行java工程

import org.eclipse.paho.client.mqttv3.MqttClient;  

import org.eclipse.paho.client.mqttv3.MqttConnectOptions;  

import org.eclipse.paho.client.mqttv3.MqttException;  

import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence;  

import com.tibco.mqtt.test.CustomMQTTCallBack;  

 
public class SubScriberExample {  

  
    /** 

     * @param args 

     */  

    public static void main(String[] args) {  

         String topicFilter ="test";  

         String broker = "tcp://192.168.80.196:1883" ;  

         String clientId = "paho-1" ;  

         MemoryPersistence persistence = new MemoryPersistence();  

          try {  

                 MqttClient sampleClient = new MqttClient(broker, clientId,persistence);  

                 MqttConnectOptions connOpts = new MqttConnectOptions();  

                 connOpts.setCleanSession( false );  

                 System. out .println( "Connecting to broker: " + broker);  

                 sampleClient.connect(connOpts);  

                 System. out .println( "Connected" );  

                 sampleClient.setCallback(new CustomMQTTCallBack());  

                 sampleClient.subscribe(topicFilter,0);  

                 System. out .println( "Subscribe success for: "+topicFilters.toString());  

         } catch (MqttException me) {  

                 System. out .println( "reason " + me.getReasonCode());  

                 System. out .println( "msg " + me.getMessage());  

                 System. out .println( "loc " + me.getLocalizedMessage());  

                 System. out .println( "cause " + me.getCause());  

                 System. out .println( "excep " + me);  

                 me.printStackTrace();  

         }  

  

    }  

  

}  

抓包结果如下:


2.协议分析

协议的地址(http://docs.oasis-open.org/mqtt/mqtt/v3.1.1/os/mqtt-v3.1.1-os.html#_Toc398718068)

  1. 固定头部
Paste_Image.png

从上图的抓包程序得到的数据可知,固定头部的16进制为:90 04
结合上面的表1,我们可知其具体含义如下:
90---1001 0000 表示连接的请求是SUBACK
04-- 表示后面将会跟着4个字节

  1. 可变头部
Paste_Image.png

从上图的抓包程序得到的数据可知,可变头部的16进制为:00 01
结合上面的表2,我们可知其具体含义如下:
00 01 ---表示当前的SUBACK的消息ID是1,这个和上节中的SUBSCRIBE(消息订阅)的消息ID的值必须保持一致。

3.负载部分
SUBACK负载部分的消息格式见下表,负载部分主要返回订阅的结果。其返回的值下面4中类型,其他的都是没有意义的。
允许返回的值
0x00 - 表示成功- 最大的QoS 0
0x01 - 表示成功- 最大的 QoS 1
0x02 - 表示成功- 最大的 QoS 2
0x80 - 表示订阅失败。

Paste_Image.png

从上图的抓包程序得到的数据可知,负载部分实际捕获的数据为:00 00
其表示消息订阅成功,且以后收到得到订阅的消息的QoS的值只能够为0.

发送确认不需要额外部分,因此负载部分长度只有两个字节。

相关文章

  • MQTT消息格式之SUBACK消息分析

    在上一节中(MQTT消息格式之SUBSCRIBE(消息订阅)消息分析),客户端发送了订阅的消息,这个时候,服务器端...

  • MQTT消息格式之SUBSCRIBE消息分析

      物联网最近曝光率越来越高。虽然HTTP是网页的事实标准,不过机器之间(Machine-to-Machine,M...

  • 【JS tool】MQTT消息模块

    简述 基于Paho-mqtt,实现mqtt连接与消息处理 主要功能 MQTT 连接、重连、断开、消息发送 消息的订...

  • MQTT详解及百度物接入连接手机测试(含源码)

    MQTT简介 MQTT定义 MQTT(Message Queuing Telemetry Transport,消息...

  • MQTT协议之消息发布

    前言 这次要讲到客户端/服务器的发布消息行为,与PUBLISH相关的消息类型,会在这里提到。 PUBLISH 客户...

  • MQTT协议之消息订阅

    序 在MQTT协议中,最重要的就是发布/订阅,下面重点分析下消息订阅。 SUBSCRIBE 一般来讲,客户端在成功...

  • mqtt协议之保留消息

    保留消息 1、保留消息的使用场景 以设备升级为例,假如我们要发布一个升级任务,以使得所有的设备都能在本次升级任务中...

  • MQTT从搭建代理服务器到推送消息过程

    MQTT简介: MQTT消息的主要特点: MQTT根据QoS定义的等级来传输消息: level 0:最多一次的传输...

  • iOS MQTTClient

    什么是MQTT MQTT(消息队列遥测传输),基于发布/订阅的消息协议。MQTT工作在TCP/IP协议族上,是为硬...

  • MQTT协议 -- 消息报文格式

    虽然学习协议是枯燥的,但是熟悉协议本身却是很重要的事情。如果能把其细节弄清楚,并且配合一些实验来学习,就不会那么枯...

网友评论

    本文标题:MQTT消息格式之SUBACK消息分析

    本文链接:https://www.haomeiwen.com/subject/gjvexxtx.html