2017-08-14 67 views
0

我正在使用eclipse paho mqtt c庫連接到bluemix。在Bluemix雲中完成了我的部分工作並創建了一個物聯網設備並註冊了它們,並生成了API密鑰。但是當我嘗試使用下面的代碼連接到設備時,我的代碼以5的rc狀態退出。 而且我在雲上看到日誌消息,顯示「已關閉連接,無法進行身份驗證」。無法使用eho paho c庫驗證bluemix連接

我已經嘗試了很多,但RC始終是5

感謝您的幫助。

我正在使用下面的代碼,使用我的組織ID,設備類型,空間ID和身份驗證令牌(在bluemix上,我在watson上創建了一個物聯網設備)。

#include <iostream> 
#include <sstream> 
#include <fstream> 
#include <string.h> 
#include "MQTTClient.h" 
#define CPU_TEMP "/sys/class/thermal/thermal_zone0/temp" 
using namespace std; 

#define ADDRESS "tcp://<org_ID>.messaging.internetofthings.ibmcloud.com:1883" 
#define CLIENTID "d:<org_ID>:<Device_type>:<space_ID>" 
#define AUTHMETHOD "use-token-auth" 
#define AUTHTOKEN "<authentication_token>" 
#define TOPIC "iot-2/evt/status/fmt/json" 
#define QOS 1 
#define TIMEOUT 10000L 

float getCPUTemperature(){ 
    int CPUTemp; 
    fstream fs; 
    fs.open(CPU_TEMP, fstream::in); 
    fs >> CPUTemp; 
    fs.close(); 

    return (((float)CPUTemp)/1000); 
} 

int main(int argc, char* argv[]) { 
    MQTTClient client; 
    MQTTClient_connectOptions opts = MQTTClient_connectOptions_initializer; 
    MQTTClient_message pubmsg = MQTTClient_message_initializer; 
    MQTTClient_deliveryToken token; 
    MQTTClient_create(&client, ADDRESS, CLIENTID, MQTTCLIENT_PERSISTENCE_NONE, NULL); 

    opts.keepAliveInterval = 20; 
    opts.cleansession = 1; 
    opts.username = AUTHMETHOD; 
    opts.password = AUTHTOKEN; 
    int rc; 

    if ((rc = MQTTClient_connect(client, &opts)) != MQTTCLIENT_SUCCESS) 
    { 
     cout<<"Failed to connect "<<rc<<endl; 

     return -1; 
    } 

    stringstream message; 

    message <<"{\"d\":{\"Temp\":"<<getCPUTemperature()<<"}}"; 
    pubmsg.payload = (char*) message.str().c_str(); 
    pubmsg.payloadlen = message.str().length(); 
    pubmsg.qos = QOS; 
    pubmsg.retained = 0; 

    MQTTClient_publishMessage(client, TOPIC, &pubmsg, &token); 
    cout<< "Waiting for " << (int) (TIMEOUT/1000) << "seconds for pub of"<<message.str()<<"\non topic"<<TOPIC<<"for ClientID:"<<CLIENTID<<endl; 
    rc = MQTTClient_waitForCompletion(client, token, TIMEOUT); 
    cout<<"Message with token"<< (int)token<<"delivered"<<endl; 
    MQTTClient_disconnect(client,10000); 
    MQTTClient_destroy(&client); 

    return rc; 
} 
+0

請爲您提供6個字符組織ID,以便我們可以檢查日誌中是否有錯誤。 – ValerieLampkin

回答

0

顯然bluemix,TLS和非TLS上有2種連接類型。 所以我正在訪問TLS類型使用我的代碼非TLS連接意味着。 因此認證