4000-520-616
欢迎来到免疫在线!(蚂蚁淘生物旗下平台)  请登录 |  免费注册 |  询价篮
WSS
主营:原厂直采,平行进口,授权代理(蚂蚁淘为您服务)
咨询热线电话
4000-520-616
当前位置: 首页 > 新闻动态 >
热卖商品
新闻详情
Java连接MQTT服务-wss方式
来自 : 个人图书馆 发布时间:2021-03-25

说明:前面介绍的tcp、ws方式适合Java程序在局域网内使用,不涉及到安全问题。但由于Android手机APP需要通过websocket方式来连接,就必须考虑安全性问题了,这时候就采用了wss+CA证书方式进行认证,而且在数据传输中也是加密的。大致与ws方式相同,只不过是加了证书。

1、Java代码\"复制代码\"
 1 package com.mao.mqtt; 3 import java.io.FileInputStream; 4 import java.security.KeyStore; 5 import java.security.cert.CertificateFactory; 6 import java.security.cert.X509Certificate; 7 import java.text.SimpleDateFormat; 8 import java.util.Date; 10 import javax.net.ssl.SSLContext; 11 import javax.net.ssl.SSLSocketFactory; 12 import javax.net.ssl.TrustManagerFactory; 14 import org.eclipse.paho.client.mqttv3.IMqttDeliveryToken; 15 import org.eclipse.paho.client.mqttv3.MqttCallback; 16 import org.eclipse.paho.client.mqttv3.MqttClient; 17 import org.eclipse.paho.client.mqttv3.MqttConnectOptions; 18 import org.eclipse.paho.client.mqttv3.MqttException; 19 import org.eclipse.paho.client.mqttv3.MqttMessage; 20 import org.eclipse.paho.client.mqttv3.MqttTopic; 22 /** 23 *  24 * 功能描述:MQTT测试 25 * 创建人: mao2080@sina.com 26 * 创建时间:2017年7月4日 下午5:08:59 27 * 修改人: mao2080@sina.com 28 * 修改时间:2017年7月4日 下午5:08:59 29 */ 30 public class MQTTTest_wss { 32 /**MQTT服务端ip及端口*/ 33 private static String host = \"wss://ip:443\"; 35 /**账号*/ 36 private static String username = \"li2080\"; 38 /**密码*/ 39 private static String password = \"123\"; 41 /**订阅的主题*/ 42 private static String subTopic = \"a/b/c\"; 44 /**clientID*/ 45 private static String clientId = \"li2080\"; 47 /**发布的主题*/ 48 private static String pubTopic = \"a/b/c\"; 50 /**MQTT-Client*/ 51 private static MqttClient client; 53 /**证书路径*/ 54 private static String caPath = \"E:\\\\mqtt-demo\\\\certfile\\\\CA.crt\"; 56 /** 57 * @throws InterruptedException  58 * @throws MqttException */ 59 public static void main(String[] args) throws InterruptedException, MqttException { 61 // 订阅消息的方法 62 subscribe(); 63 //  64 publish(); 65 } 67 /** 68 *  69 * 描述:订阅信息 70 * @author mao2080@sina.com 71 * @created 2017年7月4日 下午4:53:47 72 * @since  73 * @return 74 */ 75 public static void subscribe() { 76 try { 77 // 创建MqttClient 78 MQTTTest_wss.getClient().setCallback(new MqttCallback() { 80 public void connectionLost(Throwable arg0) { 82 } 84 public void messageArrived(String topic, MqttMessage message) throws Exception { 85 System.out.println(\"MQTT Rece:\" + message.toString()); 86 } 88 public void deliveryComplete(IMqttDeliveryToken token) { 90 } 92 }); 93 MQTTTest_wss.getClient().subscribe(subTopic, 0); 94 System.out.println(\"连接状态:\" + client.isConnected()); 95 } catch (Exception e) { 96 e.printStackTrace(); 97 } 98 }100 /**101 * 102 * 描述:获取MqttClient103 * @author mao2080@sina.com104 * @created 2017年7月6日 上午9:56:37105 * @since 106 * @return107 * @throws MqttException108 */109 public static MqttClient getClient() throws MqttException{110 try {111 if(client == null){112 client = new MqttClient(host, clientId);113 MqttConnectOptions conOptions = new MqttConnectOptions();114 conOptions.setUserName(username);115 conOptions.setPassword(password.toCharArray());116 conOptions.setCleanSession(true);117 conOptions.setSocketFactory(getSSLSocktet(caPath));118 client.connect(conOptions);119 }120 if(!client.isConnected()){121 client.reconnect();122 }123 } catch (Exception e) {124 e.printStackTrace();125 }126 return client;127 }129 /**130 * 131 * 描述:发布信息132 * @author mao2080@sina.com133 * @throws MqttException 134 * @created 2017年7月4日 下午4:53:32135 * @since136 */137 public static void publish() throws MqttException {138 SimpleDateFormat sdf = new SimpleDateFormat(\"yyyy-MM-dd HH:mm:ss\");139 String sendMsg = \"{time:\"+sdf.format(new Date())+\", content:\"+com.lds.iot.common.util.UUIDUtil.getLowerLetterNumber(15)+\", from: java console}\";140 try {141 MqttTopic topic = MQTTTest_wss.getClient().getTopic(pubTopic);142 MqttMessage message = new MqttMessage(sendMsg.getBytes());143 message.setQos(0);144 topic.publish(message);145 System.out.println(\"MQTT Send:\" + sendMsg);146 } catch (Exception e) {147 e.printStackTrace();148 }149 }151 /**152 * 获取SSLSocketFactory153 * @param caPath154 * @return155 * @throws Exception156 */157 public static SSLSocketFactory getSSLSocktet(String caPath) throws Exception {158 CertificateFactory cAf = CertificateFactory.getInstance(\"X.509\");159 FileInputStream caIn = new FileInputStream(caPath);160 X509Certificate ca = (X509Certificate) cAf.generateCertificate(caIn);161 KeyStore caks = KeyStore.getInstance(KeyStore.getDefaultType());162 caks.load(null, null);163 caks.setCertificateEntry(\"ca-certificate\", ca);164 TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());165 tmf.init(caks);166 caIn.close();167 SSLContext context = SSLContext.getInstance(\"TLSv1\");168 context.init(null, tmf.getTrustManagers(), null);169 return context.getSocketFactory();170 }172 }
\"复制代码\"2、Maven配置\"复制代码\"
1 dependency 2 groupId org.eclipse.paho /groupId 3 artifactId org.eclipse.paho.client.mqttv3 /artifactId 4 version 1.2.0 /version 5 /dependency 
\"复制代码\"3、服务端配置

请参考另一篇blog:http://www.cnblogs.com/mao2080/p/7772893.html

4、运行效果

\"\"

本文链接: http://wssgroup.immuno-online.com/view-719906.html

发布于 : 2021-03-25 阅读(0)
公司介绍
品牌分类
联络我们
服务热线:4000-520-616
(限工作日9:00-18:00)
QQ :1570468124
手机:18915418616
官网:http://