【MQTT】服務(wù)端

創(chuàng)建連接

MainActivity

首先我們得需要mqtt3.jar包
mqtt3下載連接

package com.servermqtt;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;

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

    public class MainActivity extends AppCompatActivity {
        private ServerMQTT mServerMQTT;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            final EditText msg= (EditText) findViewById(R.id.msg);

            findViewById(R.id.send).setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {

                 mServerMQTT.sendMessage(msg.getText().toString().trim()+"");
                }
            });
            findViewById(R.id.create). setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    try {
                        mServerMQTT=new ServerMQTT();
                    } catch (MqttException e) {
                        e.printStackTrace();
                    }
                }
            });
        }
    }
ServerMQTT
 package com.servermqtt;

import org.eclipse.paho.client.mqttv3.MqttClient;
import org.eclipse.paho.client.mqttv3.MqttConnectOptions;
import org.eclipse.paho.client.mqttv3.MqttDeliveryToken;
import org.eclipse.paho.client.mqttv3.MqttException;
import org.eclipse.paho.client.mqttv3.MqttMessage;
import org.eclipse.paho.client.mqttv3.MqttPersistenceException;
import org.eclipse.paho.client.mqttv3.MqttTopic;
import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence;

/**
 *
 * Title:Server
 * Description: 服務(wù)器向多個客戶端推送主題,即不同客戶端可向服務(wù)器訂閱相同主題
 * @author admin
 */
public class ServerMQTT {

    //tcp://MQTT安裝的服務(wù)器地址:MQTT定義的端口號 
    public static final String HOST = "tcp://192.168.10.67:61613";
    //定義一個主題
    public static final String TOPIC = "topic11";
    //定義MQTT的ID,可以在MQTT服務(wù)配置中指定
    private static final String clientid = "client1";

    private MqttClient client;
    private MqttTopic topic11;
    private String userName = "admin";
    private String passWord = "password";

    private MqttMessage message;
    private ServerMQTT mServer;

    /**
     * 構(gòu)造函數(shù)
     * @throws MqttException
     */
    public ServerMQTT() throws MqttException {
        // MemoryPersistence設(shè)置clientid的保存形式灾锯,默認為以內(nèi)存保存
        client = new MqttClient(HOST, clientid, new MemoryPersistence());
        connect();
    }

    /**
     *  用來連接服務(wù)器
     */
    private void connect() {
        MqttConnectOptions options = new MqttConnectOptions();
        options.setCleanSession(false);
        options.setUserName(userName);
        options.setPassword(passWord.toCharArray());
        // 設(shè)置超時時間
        options.setConnectionTimeout(10);
        // 設(shè)置會話心跳時間
        options.setKeepAliveInterval(20);
        try {
            client.setCallback(new PushCallback());
            client.connect(options);
            topic11 = client.getTopic(TOPIC);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     *
     * @param topic
     * @param message
     * @throws MqttPersistenceException
     * @throws MqttException
     */
    public void publish(MqttTopic topic , MqttMessage message) throws MqttPersistenceException,
            MqttException {
        MqttDeliveryToken token = topic.publish(message);
        token.waitForCompletion();
        System.out.println("message is published completely! "
                + token.isComplete());
    }
    public void  sendMessage(String msg){
        try {
            message = new MqttMessage();
            message.setQos(1);
            message.setRetained(true);
            message.setPayload(msg.getBytes());
            publish(topic11 , message);
        } catch (MqttException e) {
            e.printStackTrace();
        }
    }
}
PushCallback
package com.servermqtt; /**
 *
 * Description:
 * @author admin
 * 2017年2月10日下午18:04:07
 */

import org.eclipse.paho.client.mqttv3.IMqttDeliveryToken;
import org.eclipse.paho.client.mqttv3.MqttCallback;
import org.eclipse.paho.client.mqttv3.MqttMessage;

/**
 * 發(fā)布消息的回調(diào)類
 *
 * 必須實現(xiàn)MqttCallback的接口并實現(xiàn)對應(yīng)的相關(guān)接口方法CallBack 類將實現(xiàn) MqttCallBack。
 * 每個客戶機標(biāo)識都需要一個回調(diào)實例猎醇。在此示例中,構(gòu)造函數(shù)傳遞客戶機標(biāo)識以另存為實例數(shù)據(jù)努溃。
 * 在回調(diào)中硫嘶,將它用來標(biāo)識已經(jīng)啟動了該回調(diào)的哪個實例。
 * 必須在回調(diào)類中實現(xiàn)三個方法:
 *
 *  public void messageArrived(MqttTopic topic, MqttMessage message)接收已經(jīng)預(yù)訂的發(fā)布梧税。
 *
 *  public void connectionLost(Throwable cause)在斷開連接時調(diào)用沦疾。
 *
 *  public void deliveryComplete(MqttDeliveryToken token))
 *  接收到已經(jīng)發(fā)布的 QoS 1 或 QoS 2 消息的傳遞令牌時調(diào)用。
 *  由 MqttClient.connect 激活此回調(diào)第队。
 *
 */
public class PushCallback implements MqttCallback {

    public void connectionLost(Throwable cause) {
        // 連接丟失后哮塞,一般在這里面進行重連
        System.out.println("連接斷開,可以做重連");
    }

    public void deliveryComplete(IMqttDeliveryToken token) {
        System.out.println("deliveryComplete---------" + token.isComplete());
    }

    public void messageArrived(String topic, MqttMessage message) throws Exception {
        // subscribe后得到的消息會執(zhí)行到這里面
        System.out.println("接收消息主題 : " + topic);
        System.out.println("接收消息Qos : " + message.getQos());
        System.out.println("接收消息內(nèi)容 : " + new String(message.getPayload()));
    }
}
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    >


    <Button
        android:text="創(chuàng)建"
        android:id="@+id/create"
        android:onClick="onClick"
        android:layout_width="match_parent"
        android:layout_height="50dp"/>
    <Button
        android:text="發(fā)送消息"
        android:id="@+id/send"
        android:onClick="onClick"
        android:layout_width="match_parent"
        android:layout_height="50dp"/>
    <EditText
        android:id="@+id/msg"
        android:layout_width="match_parent"
        android:layout_height="50dp"/>

</LinearLayout>
創(chuàng)建連接成功我們會在后臺看見
Paste_Image.png
接著我們來發(fā)消息 不過這個時候我們還沒有客戶端的連接 我們先連接一下客戶端
Paste_Image.png

客戶端成功接收消息 客戶端

Paste_Image.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末凳谦,一起剝皮案震驚了整個濱河市忆畅,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌尸执,老刑警劉巖家凯,帶你破解...
    沈念sama閱讀 216,591評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異如失,居然都是意外死亡绊诲,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,448評論 3 392
  • 文/潘曉璐 我一進店門褪贵,熙熙樓的掌柜王于貴愁眉苦臉地迎上來掂之,“玉大人,你說我怎么就攤上這事竭鞍“寤螅” “怎么了橄镜?”我有些...
    開封第一講書人閱讀 162,823評論 0 353
  • 文/不壞的土叔 我叫張陵偎快,是天一觀的道長。 經(jīng)常有香客問我洽胶,道長晒夹,這世上最難降的妖魔是什么裆馒? 我笑而不...
    開封第一講書人閱讀 58,204評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮丐怯,結(jié)果婚禮上喷好,老公的妹妹穿的比我還像新娘。我一直安慰自己读跷,他們只是感情好梗搅,可當(dāng)我...
    茶點故事閱讀 67,228評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著效览,像睡著了一般无切。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上丐枉,一...
    開封第一講書人閱讀 51,190評論 1 299
  • 那天哆键,我揣著相機與錄音,去河邊找鬼瘦锹。 笑死籍嘹,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的弯院。 我是一名探鬼主播辱士,決...
    沈念sama閱讀 40,078評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼听绳!你這毒婦竟也來了识补?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,923評論 0 274
  • 序言:老撾萬榮一對情侶失蹤辫红,失蹤者是張志新(化名)和其女友劉穎凭涂,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體贴妻,經(jīng)...
    沈念sama閱讀 45,334評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡切油,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,550評論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了名惩。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片澎胡。...
    茶點故事閱讀 39,727評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖娩鹉,靈堂內(nèi)的尸體忽然破棺而出攻谁,到底是詐尸還是另有隱情,我是刑警寧澤弯予,帶...
    沈念sama閱讀 35,428評論 5 343
  • 正文 年R本政府宣布戚宦,位于F島的核電站,受9級特大地震影響锈嫩,放射性物質(zhì)發(fā)生泄漏受楼。R本人自食惡果不足惜垦搬,卻給世界環(huán)境...
    茶點故事閱讀 41,022評論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望艳汽。 院中可真熱鬧猴贰,春花似錦、人聲如沸河狐。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,672評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽馋艺。三九已至义郑,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間丈钙,已是汗流浹背非驮。 一陣腳步聲響...
    開封第一講書人閱讀 32,826評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留雏赦,地道東北人劫笙。 一個月前我還...
    沈念sama閱讀 47,734評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像星岗,于是被迫代替她去往敵國和親填大。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,619評論 2 354

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理俏橘,服務(wù)發(fā)現(xiàn)允华,斷路器,智...
    卡卡羅2017閱讀 134,652評論 18 139
  • 1寥掐、下載windos下服務(wù)器環(huán)境emqttd-windows10-v2.2.0.zip http://emqtt....
    monkeyish閱讀 2,252評論 0 1
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,078評論 25 707
  • 推送技術(shù)產(chǎn)生場景: --服務(wù)器端主動性: 客戶端與服務(wù)器交互都是客戶端主動的, 服務(wù)器一般不能主動與客戶端進行數(shù)據(jù)...
    原軍鋒閱讀 34,601評論 4 60
  • 《七律·無題》 ——秋花系列之無名花 數(shù)次叩問不知情靴寂, 只說為君愛指甲。 紅粉佳人難再得召耘, 秦嶺深處蕩...
    曦微w行走在路上閱讀 381評論 0 7