阅读649 返回首页    go 外汇


JAVA-SDK使用(MQTT)__SDK使用参考_设备端接入手册_阿里云物联网套件-阿里云

本文以JAVA版SDK为例,演示如何让设备通过MQTT协议连接到阿里云IoT,并通过PUB/SUB实现一个简单的M2M通信。

使用示例

  • 第一步: 首先通过设备认证,获取到对应的配置信息.
  • 第二步: 通过获取到的公钥证书来配置TLS/SSL,与阿里云进行连接.
  • 第三步: 通过MQTT协议与阿里云进行设备通信.

请使用JDK7来跑DEMO程序.运行DEMO之前,请首先修改 com.alibaba.iot.demo.util.Config 类,将对应的配置信息填写完整。

第一步

获取证书,利用IotAuthUtil类来处理. 具体的流程参考设备认证的流程.


  1. //Step 1: 获取配置信息
  2. System.out.println("开始获取配置信息!");
  3. if (Config.deviceName.equals(Config.deviceName2))
  4. {
  5. System.out.println("设备1和设备2不能相同!");
  6. return;
  7. }
  8. Map<String, String> result = IotAuthUtil.auth(Config.deviceName, Config.deviceSecret);
  9. //1.1 得到公钥的BASE64编码以后的字符串数据
  10. String pubKey = result.get("pubkey");
  11. //1.2 得到连接的目的地IP与端口
  12. String servers = result.get("servers");
  13. String targetServer = servers.substring(0, servers.indexOf("|"));
  14. //1.3 得到BASE64字符串解码以后的公钥证书文件
  15. byte[] pubKeyByteContent = Base64Util.decode(pubKey);
  16. //1.4 得到设备的ID
  17. String deviceId1 = result.get("deviceId");
  18. result = IotAuthUtil.auth(Config.deviceName2, Config.deviceSecret2);
  19. String deviceId2 = result.get("deviceId");
  20. System.out.println("获取配置成功! 接入地址: " + targetServer);

第二步

配置TLS/SSL信息.


  1. InputStream is = new ByteArrayInputStream(pubKeyByteContent);
  2. InputStream caInput = new BufferedInputStream(is);
  3. CertificateFactory cf = CertificateFactory.getInstance("X.509");
  4. Certificate ca = null;
  5. try {
  6. ca = cf.generateCertificate(caInput);
  7. } catch (CertificateException e) {
  8. e.printStackTrace();
  9. } finally {
  10. caInput.close();
  11. }
  12. String keyStoreType = KeyStore.getDefaultType();
  13. KeyStore keyStore = KeyStore.getInstance(keyStoreType);
  14. keyStore.load(null, null);
  15. keyStore.setCertificateEntry("ca", ca);
  16. String tmfAlgorithm = TrustManagerFactory.getDefaultAlgorithm();
  17. TrustManagerFactory tmf = TrustManagerFactory.getInstance(tmfAlgorithm);
  18. tmf.init(keyStore);
  19. SSLContext context = SSLContext.getInstance("TLSV1.2");
  20. context.init(null, tmf.getTrustManagers(), null);
  21. SSLSocketFactory socketFactory = context.getSocketFactory();

第三步

与阿里云建立TLS/SSL连接.


需要注意的是在配置MQTT连接时, Connect协议当中 clientId 属性值为 productKey:deviceId username 属性值为 ToUpperCase(MD5_32(productKey+productSecret+deviceId+deviceSecret)) 这样以便阿里云对当前连接的有效性进行验证.

  1. final String topic = Config.topic;
  2. String broker = "ssl://" + targetServer;
  3. //客户端ID格式: productKey + deviceId.
  4. String clientId = Config.productKey + ":" + deviceId;
  5. MemoryPersistence persistence = new MemoryPersistence();
  6. SSLSocketFactory socketFactory = createSSLSocket(stest);
  7. final MqttClient sampleClient = new MqttClient(broker, clientId, persistence);
  8. MqttConnectOptions connOpts = new MqttConnectOptions();
  9. connOpts.setMqttVersion(4);// MQTT 3.1.1
  10. connOpts.setSocketFactory(socketFactory);
  11. String signUserName = signUserName(deviceId);
  12. connOpts.setUserName(signUserName);
  13. connOpts.setKeepAliveInterval(65);
  14. System.out.println("进行连接, 目的地: " + broker);
  15. sampleClient.connect(connOpts);

第四步

进行消息Publish.


  1. String content = "Message From Device:" + Config.deviceName2;
  2. MqttMessage message = new MqttMessage(content.getBytes());
  3. message.setQos(1);
  4. sampleClient.publish(topic, message);
  5. System.out.println("消息发布成功!");

备注:在第四步进行数据通信时需要创建Topic,请在控制台将设备添加授权。如果多个设备使用同一个Topic即可实现M2M通信。

最后更新:2016-07-26 18:54:03

  上一篇:go C-SDK使用(其它)__SDK使用参考_设备端接入手册_阿里云物联网套件-阿里云
  下一篇:go JAVA-SDK使用(CCP)__SDK使用参考_设备端接入手册_阿里云物联网套件-阿里云