649
外汇
JAVA-SDK使用(MQTT)__SDK使用参考_设备端接入手册_阿里云物联网套件-阿里云
本文以JAVA版SDK为例,演示如何让设备通过MQTT协议连接到阿里云IoT,并通过PUB/SUB实现一个简单的M2M通信。
使用示例
- 第一步: 首先通过设备认证,获取到对应的配置信息.
- 第二步: 通过获取到的公钥证书来配置TLS/SSL,与阿里云进行连接.
- 第三步: 通过MQTT协议与阿里云进行设备通信.
请使用JDK7来跑DEMO程序.运行DEMO之前,请首先修改
com.alibaba.iot.demo.util.Config
类,将对应的配置信息填写完整。
第一步
获取证书,利用IotAuthUtil
类来处理. 具体的流程参考设备认证的流程.
//Step 1: 获取配置信息
System.out.println("开始获取配置信息!");
if (Config.deviceName.equals(Config.deviceName2))
{
System.out.println("设备1和设备2不能相同!");
return;
}
Map<String, String> result = IotAuthUtil.auth(Config.deviceName, Config.deviceSecret);
//1.1 得到公钥的BASE64编码以后的字符串数据
String pubKey = result.get("pubkey");
//1.2 得到连接的目的地IP与端口
String servers = result.get("servers");
String targetServer = servers.substring(0, servers.indexOf("|"));
//1.3 得到BASE64字符串解码以后的公钥证书文件
byte[] pubKeyByteContent = Base64Util.decode(pubKey);
//1.4 得到设备的ID
String deviceId1 = result.get("deviceId");
result = IotAuthUtil.auth(Config.deviceName2, Config.deviceSecret2);
String deviceId2 = result.get("deviceId");
System.out.println("获取配置成功! 接入地址: " + targetServer);
第二步
配置TLS/SSL信息.
InputStream is = new ByteArrayInputStream(pubKeyByteContent);
InputStream caInput = new BufferedInputStream(is);
CertificateFactory cf = CertificateFactory.getInstance("X.509");
Certificate ca = null;
try {
ca = cf.generateCertificate(caInput);
} catch (CertificateException e) {
e.printStackTrace();
} finally {
caInput.close();
}
String keyStoreType = KeyStore.getDefaultType();
KeyStore keyStore = KeyStore.getInstance(keyStoreType);
keyStore.load(null, null);
keyStore.setCertificateEntry("ca", ca);
String tmfAlgorithm = TrustManagerFactory.getDefaultAlgorithm();
TrustManagerFactory tmf = TrustManagerFactory.getInstance(tmfAlgorithm);
tmf.init(keyStore);
SSLContext context = SSLContext.getInstance("TLSV1.2");
context.init(null, tmf.getTrustManagers(), null);
SSLSocketFactory socketFactory = context.getSocketFactory();
第三步
与阿里云建立TLS/SSL连接.
需要注意的是在配置MQTT连接时, Connect协议当中 clientId
属性值为 productKey:deviceId
username
属性值为 ToUpperCase(MD5_32(productKey+productSecret+deviceId+deviceSecret))
这样以便阿里云对当前连接的有效性进行验证.
final String topic = Config.topic;
String broker = "ssl://" + targetServer;
//客户端ID格式: productKey + deviceId.
String clientId = Config.productKey + ":" + deviceId;
MemoryPersistence persistence = new MemoryPersistence();
SSLSocketFactory socketFactory = createSSLSocket(stest);
final MqttClient sampleClient = new MqttClient(broker, clientId, persistence);
MqttConnectOptions connOpts = new MqttConnectOptions();
connOpts.setMqttVersion(4);// MQTT 3.1.1
connOpts.setSocketFactory(socketFactory);
String signUserName = signUserName(deviceId);
connOpts.setUserName(signUserName);
connOpts.setKeepAliveInterval(65);
System.out.println("进行连接, 目的地: " + broker);
sampleClient.connect(connOpts);
第四步
进行消息Publish.
String content = "Message From Device:" + Config.deviceName2;
MqttMessage message = new MqttMessage(content.getBytes());
message.setQos(1);
sampleClient.publish(topic, message);
System.out.println("消息发布成功!");
备注:在第四步进行数据通信时需要创建Topic,请在控制台将设备添加授权。如果多个设备使用同一个Topic即可实现M2M通信。
最后更新:2016-07-26 18:54:03
上一篇:
C-SDK使用(其它)__SDK使用参考_设备端接入手册_阿里云物联网套件-阿里云
下一篇:
JAVA-SDK使用(CCP)__SDK使用参考_设备端接入手册_阿里云物联网套件-阿里云
对象存储OSS控制台—总体概览页__视频专区_对象存储 OSS-阿里云
云服务器 ECS 自动快照随磁盘释放
项目空间的权限管理__安全相关语句汇总_安全指南_大数据计算服务-阿里云
接口文档__Android_安全组件教程_移动安全-阿里云
unsupportthechannelHTTP__错误说明_API 网关-阿里云
实例管理__使用表格存储控制台_快速入门_表格存储-阿里云
SDK接口简介__数据订阅_用户指南_数据传输-阿里云
渠道专属API接口文档__渠道商问题_渠道合作伙伴_合作伙伴-阿里云
查询域名详情__域名相关接口_API_API 网关-阿里云
命令输出格式__命令行结构和参数_用户指南_命令行工具 CLI-阿里云
相关内容
常见错误说明__附录_大数据计算服务-阿里云
发送短信接口__API使用手册_短信服务-阿里云
接口文档__Android_安全组件教程_移动安全-阿里云
运营商错误码(联通)__常见问题_短信服务-阿里云
设置短信模板__使用手册_短信服务-阿里云
OSS 权限问题及排查__常见错误及排除_最佳实践_对象存储 OSS-阿里云
消息通知__操作指南_批量计算-阿里云
设备端快速接入(MQTT)__快速开始_阿里云物联网套件-阿里云
查询API调用流量数据__API管理相关接口_API_API 网关-阿里云
使用STS访问__JavaScript-SDK_SDK 参考_对象存储 OSS-阿里云