Paho MQTT(C++)客户端无法连接到Mosquito
Paho MQTT (C++) client fails to connect to Mosquitto
我已经获得了使用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++客户端。
相关文章:
- 当套接字连接断开时检测C/C++Unix
- 无法在windows上使用mingw将sqlite3与c连接
- 到连接组件算法的问题(递归)
- QTcpSocket在不阻塞GUI的情况下重新连接到服务器
- 无法在C++中建立与MySQL数据库的连接
- PC中的程序和PHONE中的本机描述应用程序之间的数据连接
- 在Qt Creator中,如何在连接到正在运行的进程后查看控制台输出
- 连接 dockerized 模型和 dockerized 数据库时出现"无法 SQLConnect"错误
- 使用 bfs 解决连接组件问题时得到错误的答案
- 在C++的两个字符串中连接以逗号分隔的唯一值
- 如何修复valgrind启动时的致命错误(与libc6-dbg和libc6-dbg:i386连接)
- C++应用程序 MySQL odbc 数据库连接错误:在引发"otl_tmpl_exception<>"实例后终止调用
- OSX蓝牙打开RFCOMMChannelAsync声称已连接,但未建立连接,并且从未调用过委托
- 在 libcurl 连接池中预创建连接
- 套接字连接"Operation not permitted"错误,甚至使用升压/平发器根.cpp
- libcurl 和 DNS ttl 中的内部连接管理
- 如何应用 libcurl 的持久连接选项
- 提升 ASIO - io_service 不要等待连接到线程
- WinSock2:connect() 提供"连接被拒绝"
- 升压信号2将插槽传递到成员功能以断开连接