閱讀1023 返回首頁    go windows


JAVA-SDK使用(CCP)__SDK使用參考_設備端接入手冊_阿裏雲物聯網套件-阿裏雲

本文以JAVA版SDK為例,演示如何讓設備通過CCP協議連接到阿裏雲IoT,並通過PUB/SUB實現一個簡單的M2M通信。

第一步

下載JAVA版SDK,導入JAVA工程,參考IotClientDemo.java,將SDK使用準備中獲得的信息配置初始化:


  1. ConnectOpts opts = new ConnectOpts();
  2. opts.setDeviceName("xxx");//設備名稱
  3. opts.setDeviceSecret("xxx");//設備密鑰
  4. opts.setProductAppKey("xxx");//產品證書key
  5. opts.setProductAppSecret("xxx");//產品證書密鑰
  6. opts.setAuthUrl("https://iot.channel.aliyun.com");
  7. opts.setAliveSeconds((short) 80);//心跳時間,不能小於60秒
  8. opts.setSignMethod("md5");// HmacMD5 HmacSh1 Md5
  9. opts.setAutoReconnect(true);//是否自動重連
  10. opts.setAutoReconnectDelay(5000);//重連間隔時間

備注:本demo使用 eclipse - IDE 創建

第二步

運行IotClientDemo.java:


  1. //創建ccp客戶端
  2. CcpClient ccpClient = new CcpClient(opts);
  3. // 把當前實例增加為監聽對象,異步消息會回調到監聽對象
  4. ccpClient.attachListener(new CcpMessageListener() {
  5. @Override
  6. public void onMessage(AbstractMessage message) {
  7. LogUtil.print("收到消息:" + message);
  8. //有異步消息到達會回調這裏
  9. }
  10. @Override
  11. public void onConnect(ConnectACK message) {
  12. LogUtil.print("連接消息:" + message);
  13. //連接成功會回調這裏
  14. }
  15. @Override
  16. public void onOffLine() {
  17. LogUtil.print("會話斷開");
  18. }
  19. });
  20. // 連接數據服務器
  21. ccpClient.connect();

demo運行有3個階段:

(1)調用授權接口初始化設備,服務器返回公鑰以及數據通道服務器地址(這個地址是可變的)

(2)設備端生成自己的私鑰seedkey,並使用服務器公鑰加密發給服務器,成功後得到sessionId(sid)

(3)使用sid連接數據通道建立TCP連接(即第一步返回的服務器地址),進行數據傳輸

分別對應的日誌示例:

  1. 調用設備授權認證接口:
  2. {"servers":"8.8.8.8:8080","pubkey":"-----BEGIN CERTIFICATE--此處省略...----END CERTIFICATE-----","deviceId":"xxxx"}

拿到pubkey後,客戶端需要使用pubkey傳輸自己的私鑰seedkey,發起確認授權:

  1. iot/sid 獲取會話認證返回結果:
  2. {"sid":"QMAOohO+7vVawxF4eHo2hktfmUa2yyWHeZlNWGcwWTANDstjcUquadlfQD1+oGLq"}
  3. sid=32f3fb1a0a98df3eeaefdd3e07201254

服務器確認後,返回sid即sessionid,設備即可使用此sid tcp方式連接第一步的servers數據通信,通信過程中數據使用seedkey私鑰加密,而seedkey僅僅在上一步使用pubkey加密告知服務器,數據是安全可靠的。

  1. from server: FixedHeader{remainLength=48, messageType=2, compress=true, qosLevel=1, hasData=true}
  2. 接收到消息:FixedHeader{remainLength=48, messageType=2, compress=true, qosLevel=1, hasData=true}
  3. ConnectACK{FixedHeader{remainLength=48, messageType=2, compress=true, qosLevel=1, hasData=true}, sequenceID=0};
  4. ConnectACK{statusCode=success, connectionToken='mP2qbVZYOA6GX4BKLHfSiQ==', suggestionIPs='',latestSDKPath:}
  5. 5秒後模擬一個sub、再5秒發送pub、再15秒發送unsub、5秒後再嚐試pub
  6. 5秒後 ,模擬發送一個數據sub請求,訂閱的隊列=xxxxx/test
  7. 消息發送成功:Subscribe[sequenceID:+0,topicFilters:[xxxxx/test]]
  8. from server: FixedHeader{remainLength=16, messageType=28, compress=true, qosLevel=1, hasData=true}
  9. 接收到消息:FixedHeader{remainLength=16, messageType=28, compress=true, qosLevel=1, hasData=true}
  10. SubAck[sequenceID:+0,codes:[0],msgs:[]]
  11. 5秒後 ,模擬發送一個數據pub請求,發布到隊列=xxxxx/test
  12. 消息發送成功:Publish[sequenceID:+0,topic:23301499/test,aliveSecond:0,payload.length:19],payload轉字符串:你好啊,約嗎?
  13. from server: FixedHeader{remainLength=48, messageType=25, compress=true, qosLevel=1, hasData=true}
  14. 接收到消息:FixedHeader{remainLength=48, messageType=25, compress=true, qosLevel=1, hasData=true}
  15. Publish[sequenceID:+4,topic:xxxxx/test,aliveSecond:0,payload.length:19],payload轉字符串:你好啊,約嗎?
  16. 15秒後 ,模擬發送一個unsub請求,取消隊列=xxxxx/test
  17. 消息發送成功:UnSubscribe[sequenceID:+0,topicFilters:[xxxxx/test]]
  18. from server: FixedHeader{remainLength=16, messageType=30, compress=true, qosLevel=1, hasData=true}
  19. 接收到消息:FixedHeader{remainLength=16, messageType=30, compress=true, qosLevel=1, hasData=true}
  20. UnSubAck[sequenceID:+0,codes:[0]]
  21. 5秒後 ,再發送一個pub消息,隊列=xxxxx/test
  22. 消息發送成功:Publish[sequenceID:+0,topic:xxxxx/test,
  23. aliveSecond:0,payload.length:19],payload轉字符串:你好啊,約嗎?

備注:在第二步進行數據通信時需要創建Topic,請在控製台將設備添加授權。如果多個設備使用同一個Topic即可實現M2M通信。

最後更新:2016-07-20 11:33:41

  上一篇:go JAVA-SDK使用(MQTT)__SDK使用參考_設備端接入手冊_阿裏雲物聯網套件-阿裏雲
  下一篇:go 設備認證__設備基於MQTT接入_設備端接入手冊_阿裏雲物聯網套件-阿裏雲