HTTP和MQTT協議實踐


一. 安裝Java開發環境和Java IDE編程工具 Eclipse 或 IDEA,基於HTTP協議(嚴格地說是 "REST接口規范")讀取互聯網上web服務網站實現:

1)讀取指定城市的天氣預報信息

package cn.mqtt;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLEncoder;

public class orderWeather {
    public static void main(String[] args) throws IOException {
        // TODO Auto-generated method stub
        String weather= URLEncoder.encode("重慶天氣","UTF-8");
        //1. 	先准備一個URL類的對象 u
        URL url = new URL("https://api.jisuapi.com/iqa/query?appkey=62958a3a6ef3c56d&question="+weather);
        //2. 	打開服務器連接,得到連接對象 conn
        URLConnection conn = url.openConnection();
        //3. 	獲取加載數據的字節輸入流 is
        InputStream is = conn.getInputStream();
        //4.	將is裝飾為能一次讀取一行的字符輸入流 br
        BufferedReader br = new BufferedReader(new InputStreamReader(is,"UTF-8"));
        //5.	加載一行數據
        String text = br.readLine();
        //6.	顯示
        int i=text.indexOf("content");
        int j=text.indexOf("relquestion");
        String text1=text.substring(i+10, j-3);
        int m=text1.indexOf("<5.4m\\/s\\r\\n");
        String text2="";
        text2=text1.substring(m+12, text1.length());
        text1=text1.substring(0, m);
        System.out.println(text1);
        System.out.println(text2);
        //7.	釋放資源
        br.close();
    }
}

效果展示:

2)給指定手機號碼發送驗證碼

1.創建一個網建短信通的賬戶,每個用戶都有五條免費的信息可以發送。

2.記住自己的用戶名、接口安全秘鑰

3.代碼

在網建短信通的接口API中可以找到JAVA的實例可以下載下來

主函數:

public class test {
	//用戶名
	private static String Uid = "wq13752962783";
	//接口安全秘鑰
	private static String Key = "d41d8cd98f00b204e980";
	//手機號碼,多個號碼如13800000000,13800000001,13800000002
	private static String smsMob = "15823360554";
	//短信內容
	private static String smsText = "【重慶交通大學物聯網二班】驗證碼:631707060232 張鑫";

	public static void main(String[] args) {
		HttpClientUtil client = HttpClientUtil.getInstance();
		//UTF發送
		int result = client.sendMsgUtf8(Uid, Key, smsText, smsMob);
		if(result>0){
			System.out.println("UTF8成功發送條數=="+result);
		}else{
			System.out.println(client.getErrorMsg(result));
		}
	}
}

展示結果:

二. 學習和熟悉MQTT 協議

1)在本機上安裝MQTT服務器和客戶端軟件,練習消息發布與訂閱

1.MQTT服務器:EMQX

把MQTT服務器安裝到雲主機上的ubuntu系統上

參考步驟:https://blog.csdn.net/sulang521/article/details/106857471

效果展示:
雲主機:

emqx啟動:

2.客戶端:MQTTX、

2)利用網上提供的MQTT服務,編寫MQTT客戶端程序(python、java或c#、c/c++, 任意一種編程語言),自定義一個天氣預報主題,完成訂閱與發布。思考MQTT與前面REST協議的區別。

1.在idea中寫下客戶端代碼

package cn.mqtt;
import org.eclipse.paho.client.mqttv3.MqttClient;
import org.eclipse.paho.client.mqttv3.MqttConnectOptions;
import org.eclipse.paho.client.mqttv3.MqttException;
import org.eclipse.paho.client.mqttv3.MqttTopic;
import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence;

import java.util.concurrent.ScheduledExecutorService;

public class ClientMQTT {
    public static final String HOST = "tcp:自己的雲主機外網地址";
    public static final String TOPIC = "1";
    private static final String clientid = "Client";
    private MqttClient client;
    private MqttConnectOptions options;
    private String userName = "admin";
    private String passWord = "public";

    private ScheduledExecutorService scheduler;

    private void start() {
        try {
            // host為主機名,clientid即連接MQTT的客戶端ID,一般以唯一標識符表示,MemoryPersistence設置clientid的保存形式,默認為以內存保存
            client = new MqttClient(HOST, clientid, 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 PushCallback());
            MqttTopic topic = client.getTopic(TOPIC);
            //setWill方法,如果項目中需要知道客戶端是否掉線可以調用該方法。設置最終端口的通知消息
            options.setWill(topic, "close".getBytes(), 2, true);

            client.connect(options);
            //訂閱消息
            int[] Qos  = {1};
            String[] topic1 = {TOPIC};
            client.subscribe(topic1, Qos);

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

    public static void main(String[] args) throws MqttException {
        ClientMQTT client = new ClientMQTT();
        client.start();
    }

}

效果展示:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM