中易网

如何用wireshark分析mqtt协议

答案:1  悬赏:50  
解决时间 2021-01-16 14:01
  • 提问者网友:wodetian
  • 2021-01-16 02:44
如何用wireshark分析mqtt协议
最佳答案
  • 二级知识专家网友:北方的南先生
  • 2021-01-16 03:40
MQTT是一项消息传递技术,由IBM再2001年发布。

总结一下,机制就是使用一个代理服务器messagebroker,
客户端client连接上这个服务器,然后告诉服务器说,我可以接收哪些类型的消息,
同时,client也可以发布自己的消息,这些消息根据协议的内容,可以被其他client获取。
只要手机客户端,连上服务器,然后就可以接收和发布消息了,不用自己写socket什么了,

低带宽,低耗电量,代码量也少,很简单吧。

package com.pig.test.mqtt;

import com.ibm.mqtt.MqttClient;

import
com.ibm.mqtt.MqttException;
import com.ibm.mqtt.MqttSimpleCallback;

public class SubscribeClient {
private final static String
CONNECTION_STRING = "tcp://192.168.1.60:1883";
private final static boolean
CLEAN_START = true;
private final static short KEEP_ALIVE =
30;//低耗网络,但是又需要及时获取数据,心跳30s
private final static String CLIENT_ID =
"client1";
private final static String[] TOPICS =
{
"Test/TestTopics/Topic1",
"Test/TestTopics/Topic2",
"Test/TestTopics/Topic3",
"tokudu/client1"
};
private
final static int[] QOS_VALUES = {0, 0, 2,
0};

//////////////////
private MqttClient mqttClient =
null;

public SubscribeClient(String i){
try {
mqttClient =
new MqttClient(CONNECTION_STRING);
SimpleCallbackHandler
simpleCallbackHandler = new
SimpleCallbackHandler();
mqttClient.registerSimpleHandler(simpleCallbackHandler);//注册接收消息方法
mqttClient.connect(CLIENT_ID+i,
CLEAN_START, KEEP_ALIVE);
mqttClient.subscribe(TOPICS,
QOS_VALUES);//订阅接主题


mqttClient.publish(PUBLISH_TOPICS, "keepalive".getBytes(), QOS_VALUES[0],

true);

} catch (MqttException e) {
// TODO Auto-generated
catch block
e.printStackTrace();
}
}


class SimpleCallbackHandler implements MqttSimpleCallback{


@Override
public void connectionLost() throws Exception {
//
TODO Auto-generated method
stub
System.out.println("客户机和broker已经断开");
}


@Override
public void
publishArrived(String topicName, byte[] payload, int Qos, boolean retained)
throws Exception {
// TODO Auto-generated method
stub
System.out.println("订阅主题: " +
topicName);
System.out.println("消息数据: " + new
String(payload));
System.out.println("消息级别(0,1,2): " +
Qos);
System.out.println("是否是实时发送的消息(false=实时,true=服务器上保留的最后消息): " +
retained);
}

}


class AdvancedCallbackHandler implements MqttSimpleCallback{

@Override
public void connectionLost() throws Exception {
//
TODO Auto-generated method stub

}

@Override
public void publishArrived(String arg0, byte[] arg1, int
arg2,
boolean arg3) throws Exception {
// TODO Auto-generated
method stub

}

}


public static void main(String[] args) {
// TODO Auto-generated
method stub
new SubscribeClient("" + i);

}

}

broker服务器,MQTT的jar包,记得下载啊,没有就消息我咯~

到这里,如果完成IBM的MQTT协议实现push消息的实例的,
都会有个问题,好像没考虑到安全问题,如果客户端连上来作乱怎么办呢?

上面用的broker时rsmb的,mqtt的简单服务器。
IBM已经推出了MQTT V3.1版本,已经加入了安全验证机制,不要怕啦。

转载仅供参考,版权属于原作者。祝你愉快,满意请采纳哦
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息!
大家都在看
推荐信息