簡體   English   中英

Paho MQTT(C ++)客戶端無法連接到Mosquitto

[英]Paho MQTT (C++) client fails to connect to Mosquitto

我已經使用Paho MQTTPacket嵌入式C ++庫獲得了連接到MQTT代理的C ++代碼。 當該經紀人為io.adafruit.com時,它可以很好地工作。 但是當它是我自己的Mosquitto實例在Raspberry Pi上運行時,連接將失敗。 我已將其縮小到MQTTClient.h中MQTT :: Client :: connect方法的這一行:

// this will be a blocking call, wait for the connack
if (waitfor(CONNACK, connect_timer) == CONNACK)

該應用程序在這里掛起大約30秒鍾,然后獲得除CONNACK以外的結果(特別是0而不是2)。

我已經嘗試了協議版本3(即3.1)和4(即3.1.1); 同樣的結果。

我的Mosquitto實例未設置身份驗證或密碼。 我試過在Mosquitto日志中打開調試消息,但是它們沒有顯示任何有用的信息。 我很茫然。 為什么我無法從我的C ++ Paho代碼連接到Mosquitto?

編輯:這是客戶端代碼...再次,這與Adafruit正常工作,但是當我將其指向本地主機上的Mosquitto時,它會如描述的那樣掛起。 (我已經刪除了用戶名和密碼-我正在發送它們,但是我真的不認為這些是問題,因為在命令行上使用mosquitto_pub或mosquitto_sub時,無論如何我都可以連接,因為mosquitto配置為允許匿名連接。)

const char* host = "127.0.0.1";
int port = 1883;
const char* clientId = "ZoomBridge";
const char* username = "...";
const char* password = "...";
MQTT::QoS subsqos = MQTT::QOS2;

ipstack = new IPStack();
client = new MQTT::Client<IPStack, Countdown, 30000>(*ipstack);

MQTTPacket_connectData data = MQTTPacket_connectData_initializer;
data.willFlag = 1;
data.MQTTVersion = 3;
data.clientID.cstring = (char*)clientId;
data.username.cstring = (char*)username;
data.password.cstring = (char*)password;

data.keepAliveInterval = 20;
data.cleansession = 1;

int rc = ipstack->connect(host, port);
if (rc != MQTT::SUCCESS) {
    cout << "Failed [1] (result " << rc << ")" << endl;
    return rc;
}

rc = client->connect(data);
if (rc != MQTT::SUCCESS) {
    cout << "Failed [2] (result " << rc << ")" << endl;
    ipstack->disconnect();
    return rc;
}

如在評論中散列。

看起來您正在設置標志,以指示您要為客戶端設置“最后遺囑”( data.willFlag = 1; ),但是不為LWT傳遞任何主題或有效負載。

如果不需要LWT,則將標志設置為0(或刪除線路設置標志),因為它應默認為禁用。

值得一提的是, Paho Embedded C ++ MQTTPacket客戶端是全部功能,而不是功能強大的Paho C ++客戶端

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM