Mqtt从服务端到Android客户端搭建(Android客户端搭建)

一、简介

MQTT(消息队列遥测传输)是ISO 标准(ISO/IEC PRF 20922)下基于发布/订阅范式的消息协议。

此处不再引入官方文字描述,以个人开发认识浅谈一下

本文分为两部分:

1、MQTT基于window服务端的建立

2、 MQTT Android客户端的实现

二、 Android客户端搭建

以我在github上的[MQTT]  https://github.com/alanjuster/MQTT做详解,

在app下的build.gradle dependencies 下引入依赖资源

compile'org.eclipse.paho:org.eclipse.paho.client.mqttv3:1.2.0'
compile'org.eclipse.paho:org.eclipse.paho.android.service:1.1.1'

同时在AndroidMainfest.xml 中注册依赖Service及必要的权限

<service android:name="org.eclipse.paho.android.service.MqttService" />

创建mqttservice对象实例:

mqttService =new MyMqttService.Builder()

//设置自动重连

.autoReconnect(true)

//设置清除回话session  true(false) 不收(收)到服务器之前发出的推送消息

.cleanSession(true)

//唯一标示 保证每个设备都唯一就可以 建议 imei

.clientId(imei)

.userName("admin")

.passWord("password")

//mqtt服务器地址 格式例如:

//  tcp://iot.eclipse.org:1883

.serverUrl("tcp://192.168.1.31:61613")

//心跳包默认的发送间隔

.keepAliveInterval(20)

.timeOut(10)

//构建出EasyMqttService 建议用application的context

.bulid(this.getApplicationContext());


发起连接 ,在连接成功后[订阅主题](订阅)
 

 /**
     * 连接Mqtt服务器
     */
    private void connect() {
        mqttService.connect(new IEasyMqttCallBack() {
            @Override
            public void messageArrived(String topic, String message, int qos) {
                //推送消息到达
                Log.e(TAG, "message= " + message);
                rece.setText("收到消息:" + message +'\n' +"主题--> " + topic);

            }
            @Override
            public void connectionLost(Throwable arg0) {
                //连接断开
                try {
                    Log.e(TAG + "connectionLost", arg0.toString());
                    Toast.makeText(MainActivity.this, "connectionLost", Toast.LENGTH_SHORT).show();
                } catch (Exception e) {

                } finally {

                }
            }
            @Override
            public void deliveryComplete(IMqttDeliveryToken arg0) {
                Log.e(TAG + "@deliveryComplete", "发送完毕" + arg0.toString());
                Toast.makeText(MainActivity.this, "deliveryComplete", Toast.LENGTH_SHORT).show();
            }
            @Override
            public void connectSuccess(IMqttToken arg0) {
                Toast.makeText(MainActivity.this, "connectSuccess", Toast.LENGTH_SHORT).show();
                Log.e(TAG + "@@@@@connectSuccess", "success");
                subscribe();
            }
            @Override
            public void connectFailed(IMqttToken arg0, Throwable arg1) {
                //连接失败
                Log.e(TAG + "@@@@@connectFailed", "fail" + arg1.getMessage());
                Toast.makeText(MainActivity.this, "connectFailed", Toast.LENGTH_SHORT).show();
            }
        });
    }



主题订阅
 

/**
     * 订阅主题
     */
    private void subscribe() {
        String[] topics = new String[]{"test"};
        //主题对应的推送策略 分别是0, 1, 2 建议服务端和客户端配置的主题一致
        // 0 表示只会发送一次推送消息 收到不收到都不关心
        // 1 保证能收到消息,但不一定只收到一条
        // 2 保证收到切只能收到一条消息
        int[] qoss = new int[]{0};
        mqttService.subscribe(topics, qoss);
    }


 

发布消息:


/**
     * 发布消息
     */
    private void publish(String msg, String topic, int qos, boolean retained) {
        mqttService.publish(msg, topic, qos, retained);
    }



从MQTT服务端建立到客户端连接过程就是这样,其实在应用过程中都是客户端之间的通讯,服务端也就是一个类似数据转发的功能。

  • 6
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值