目錄
一. 安裝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();
}
}
效果展示: