物联网通讯协议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();
}
}
是不是比套接字简单多啦!