mosquitto c API的回调函数未调用

时间:2019-02-20 16:35:55

标签: c++ c mqtt mosquitto

由于某种原因,我不得不在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.
  
      
  1. my_connect_callback()函数确实被调用,即使mosquitto_connect()返回0。实际上,没有一个回调函数   接到电话。

  2.   
  3. 尽管API成功执行,但无法将数据推送到AWS。

  4.   
故意从上面的代码中删除了

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.

0 个答案:

没有答案