2019-11-06

Mqusing System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

using System.Windows.Forms;

using uPLibrary.Networking.M2Mqtt;

using uPLibrary.Networking.M2Mqtt.Messages;

namespace M2Mmqtt

{

    public partial class Form1 : Form

    {

        String enpoint = "192.168.221.35";

        int port = 1883;

        string user = "admin";

        string pwd = "public";

        string clientId = Guid.NewGuid().ToString();

        MqttClient client;

        public Form1()

        {

            InitializeComponent();

        }

        private void Form1_Load(object sender, EventArgs e)

        {

        }

        private void btnConnect_Click(object sender, EventArgs e)

        {

            try

            {

                client = new MqttClient(enpoint, port, false, MqttSslProtocols.None, null, null);

                client.Connect(clientId, user, pwd);

                if(client.IsConnected)

                {

                    MessageBox.Show("连接成功!");

                    client.Subscribe(new string[] { "a/b/c" }, new byte[] { MqttMsgBase.QOS_LEVEL_AT_MOST_ONCE });

                    client.MqttMsgPublishReceived += Client_MqttMsgPublishReceived;

                }

            }catch(Exception ex)

            {

                MessageBox.Show(ex.Message);

            }

        }

        private void Client_MqttMsgPublishReceived(object sender, MqttMsgPublishEventArgs e)

        {

            Action showAct = new Action(ShowMsg);

            Invoke(showAct, new string[] { Encoding.UTF8.GetString(e.Message) });

            //throw new NotImplementedException();

        }

        public void ShowMsg(string msg)

        {

            txtReceiveMsg.AppendText(msg);

        }

        private void txtReceiveMsg_TextChanged(object sender, EventArgs e)

        {

        }

    }

}



















package com.example.mqtt;

import android.os.Handler;

import android.os.Message;

import android.support.v7.app.AppCompatActivity;

import android.os.Bundle;

import android.widget.Toast;

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

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

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

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

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

import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence;

import java.util.concurrent.Executors;

import java.util.concurrent.ScheduledExecutorService;

import java.util.concurrent.TimeUnit;

public class MainActivity extends AppCompatActivity {

    private String host = "tcp://192.168.221.50:1883";

    private String userName = "admin";

    private String passWord = "public";

    private Handler handler;

    private MqttClient client;

    private String myTopic = "a/b";

    private MqttConnectOptions options;

    private ScheduledExecutorService scheduler;

    public MainActivity() {

    }

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

        init();

        handler = new Handler() {

            @Override

            public void handleMessage(Message msg) {

                super.handleMessage(msg);

                if(msg.what == 1) {

                    Toast.makeText(MainActivity.this, (String) msg.obj,Toast.LENGTH_SHORT).show();

                    System.out.println("-----------------------------");

                } else if(msg.what == 2) {

                    Toast.makeText(MainActivity.this, "连接成功", Toast.LENGTH_SHORT).show();

                    try {

                        client.subscribe(myTopic, 1);

                    } catch (Exception e) {

                        e.printStackTrace();

                    }

                } else if(msg.what == 3) {

                    Toast.makeText(MainActivity.this, "连接失败,系统正在重连", Toast.LENGTH_SHORT).show();

                }

            }

        };

        startReconnect();

    }

    //从新连接

    private void startReconnect() {

        scheduler = Executors.newSingleThreadScheduledExecutor();

        scheduler.scheduleAtFixedRate(new Runnable() {

            @Override

            public void run() {

                if(!client.isConnected()) {

                    connect();

                }

            }

        }, 0 * 1000, 10 * 1000, TimeUnit.MILLISECONDS);

    }

    private void init() {

        try {

            //host为主机名,test为clientid即连接MQTT的客户端ID,一般以客户端唯一标识符表示,MemoryPersistence设置clientid的保存形式,默认为以内存保存

            client = new MqttClient(host, "test",new MemoryPersistence());

            //MQTT的连接设置

            options = new MqttConnectOptions();

            //设置是否清空session,这里如果设置为false表示服务器会保留客户端的连接记录,这里设置为true表示每次连接到服务器都以新的身份连接

            options.setCleanSession(true);

            //设置连接的用户名

            options.setUserName(userName);

            //设置连接的密码

            options.setPassword(passWord.toCharArray());

            // 设置超时时间 单位为秒

            options.setConnectionTimeout(10);

            // 设置会话心跳时间 单位为秒 服务器会每隔1.5*20秒的时间向客户端发送个消息判断客户端是否在线,但这个方法并没有重连的机制

            options.setKeepAliveInterval(20);

            //设置回调

            client.setCallback(new MqttCallback() {

                @Override

                public void connectionLost(Throwable cause) {

                    //连接丢失后,一般在这里面进行重连

                    System.out.println("connectionLost----------");

                }

                @Override

                public void deliveryComplete(IMqttDeliveryToken token) {

                    //publish后会执行到这里

                    System.out.println("deliveryComplete---------" + token.isComplete());

                }

                @Override

                public void messageArrived(String topicName, MqttMessage message)

                        throws Exception {

                    //subscribe后得到的消息会执行到这里面

                    System.out.println("messageArrived----------");

                    System.out.println("========================"+message.toString());

                    Message msg = new Message();

                    //Toast.makeText(MainActivity.this,message.toString(),Toast.LENGTH_SHORT);

                    msg.what = 1;

                    msg.obj = topicName+"---"+message.toString();

                    handler.sendMessage(msg);

                }

            });

        } catch (Exception e) {

            e.printStackTrace();

        }

    }

    //连接mqtt

    private void connect() {

        new Thread(new Runnable() {

            @Override

            public void run() {

                try {

                    client.connect(options);

                    Message msg = new Message();

                    msg.what = 2;

                    handler.sendMessage(msg);

                } catch (Exception e) {

                    e.printStackTrace();

                    Message msg = new Message();

                    msg.what = 3;

                    handler.sendMessage(msg);

                }

            }

        }).start();

    }

}

你可能感兴趣的:(2019-11-06)