Paho MQTT(C++)客户端无法连接到Mosquito

Paho MQTT (C++) client fails to connect to Mosquitto

本文关键字:连接 Mosquito 客户端 MQTT C++ Paho      更新时间:2023-10-16

我已经获得了使用Paho MQTTPack嵌入式C++库连接到MQTT代理的C++代码。当经纪人是io.adafruit.com时,它运行得非常好。但当我自己的Mosquitto实例在我的树莓派上运行时,连接失败。在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);同样的结果。

我的Mosquito实例没有设置身份验证或密码。我试着打开Mosquitto日志中的调试消息,但它们没有显示任何有用的信息。我不知所措。为什么我无法从我的C++Paho代码连接到Mosquito?

编辑:这是客户端代码。。。同样,这对Adafruit来说很好,但当我把它指向localhost上的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++MQTTPack客户端有关,而不是完整的Paho C++客户端。