MQTT连接、订阅、发布

765 阅读1分钟

物联网通讯协议MQTT,与Socket类似。废话还是不多说,直接上代码。 1、连接MQTT public void connectMqtt() { Log.e(MQTT_TAG, "开始连接MQTT"); Log.e(MQTT_TAG, "发布topic"+PUB_TOPIC); BluetoothUtil.getInstance(context).startTest(); String clientId = System.currentTimeMillis() + ""; final String serverUrl= "tcp://xxx.xx.xx.xxx:1883"; mqttAndroidClient=new MqttAndroidClient(context,serverUrl,clientId); MqttConnectOptions options=new MqttConnectOptions(); options.setAutomaticReconnect(true); options.setCleanSession(false); options.setUserName("xxx"); //设置用户名 options.setPassword("xxx".toCharArray()); //设置密码

    try {
        mqttAndroidClient.connect(options, null, new IMqttActionListener() {
            @Override
            public void onSuccess(IMqttToken asyncActionToken) {
                Log.e(MQTT_TAG,"成功连接 ");
                subsMqttMessage()
            }

            @Override
            public void onFailure(IMqttToken asyncActionToken, Throwable exception) {
                Log.e(MQTT_TAG,"连接失败"+serverUrl);
            }
        });
    } catch (MqttException e) {
        e.printStackTrace();
    }

}

2、订阅MQTT //订阅 private void subsMqttMessage(){ try { mqttAndroidClient.subscribe(SUBS_TOPIC, 0, null, new IMqttActionListener() { @Override public void onSuccess(IMqttToken asyncActionToken) { Log.e(MQTT_TAG,"Subscribe to the success"+SUBS_TOPIC); mqttAndroidClient.setCallback(new MqttCallback() { @Override public void connectionLost(Throwable cause) { }

                    @Override
                    public void messageArrived(String topic, MqttMessage message) throws Exception {
                    }

                    @Override
                    public void deliveryComplete(IMqttDeliveryToken token) {

                    }
                });
            }

            @Override
            public void onFailure(IMqttToken asyncActionToken, Throwable exception) {
                Log.e(MQTT_TAG,"订阅失败");
            }
        });

    } catch (MqttException e) {
        e.printStackTrace();
    }
}

3、发布MQTT //发布MQTT消息 private void pubMqttMessage(String msg){ MqttMessage message=new MqttMessage(); message.setPayload(msg.getBytes()); try { mqttAndroidClient.publish(PUB_TOPIC, message, null, new IMqttActionListener() { @Override public void onSuccess(IMqttToken asyncActionToken) {

                Log.i(MQTT_TAG,"发布成功"+PUB_TOPIC);

            }

            @Override
            public void onFailure(IMqttToken asyncActionToken, Throwable exception) {
                Log.e(MQTT_TAG,"发布失败");
            }
        });
    } catch (MqttException e) {
        e.printStackTrace();
    }
}
是不是比套接字简单多啦!