由于某种原因,我不得不在C ++代码中使用C API。谁能帮助我找到此代码无法正常工作的原因。
void ConfigureBroker()
{
auto res = mosquitto_lib_init();
if (res == MOSQ_ERR_SUCCESS)
std::cout<<" mosquitto_lib_init succeed. "<<std::endl;
else
std::cout<<" mosquitto_lib_init failed with result : "<<res<<std::endl;
struct mosquitto * mosq = NULL;
const char *clientId = "mydev";
mosq = mosquitto_new(clientId, true, NULL);
if (!mosq) {
std::cout<<" mosquitto_new failed. "<<std::endl;
return;
}
else
std::cout<<" mosquitto_new succeed. "<<std::endl;
res = mosquitto_tls_set(mosq, "path/to/CA.crt", NULL,
"path/to/crts/DeviceCert1.crt",
"path/to/DeviceCert1.key", NULL);
if (MOSQ_ERR_SUCCESS == res)
std::cout<<"mosquitto_tls_set succeed."<<std::endl;
else
std::cout<<"mosquitto_tls_set failed with result : "<<res<<std::endl;
mosquitto_connect_callback_set(mosq, my_connect_callback);
const char *host = "amazonaws.com";
res = mosquitto_connect(mosq, host, 8883, 60);
if (MOSQ_ERR_SUCCESS == res)
std::cout<<"mosquitto_connect succeed."<<std::endl;
else
std::cout<<"mosquitto_connect failed with result : "<<res<<std::endl;
while(!mosquitto_loop(mosq, -1, 1))
std::cout<<"mosquitto_loop_forever suceed. \n "<<std::endl;
}
上述代码的输出如下
mosquitto_lib_init succeed.
mosquitto_new succeed.
mosquitto_tls_set succeed.
mosquitto_connect succeed.
mosquitto_loop_forever suceed.
mosquitto_loop_forever suceed.
mosquitto_loop_forever suceed.
mosquitto_loop_forever suceed.
mosquitto_loop_forever suceed.
mosquitto_loop_forever suceed.
mosquitto_loop_forever suceed.
故意从上面的代码中删除了
my_connect_callback()函数确实被调用,即使mosquitto_connect()返回0。实际上,没有一个回调函数 接到电话。
尽管API成功执行,但无法将数据推送到AWS。
mosquitto_publish(),这也导致成功。任何帮助将不胜感激。
仅供参考:mosquitto_loop_forever(mosq,-1,1); 失败,并显示错误发生TLS错误。
现在已使用相同的证书在 mosquitto_pub 中进行了测试,结果显示我可能需要检查的证书存在问题
Client mosqpub|11358-PCMA4GF11 sending CONNECT
OpenSSL Error: error:14094416:SSL routines:ssl3_read_bytes:sslv3 alert certificate unknown
Error: A TLS error occurred.