[C++][ubuntu][原创]Mqtt通信在订阅信息收到的函数里面不能发送发布消息解决方法

Posted FL1623863129

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[C++][ubuntu][原创]Mqtt通信在订阅信息收到的函数里面不能发送发布消息解决方法相关的知识,希望对你有一定的参考价值。

关于Mqtt一篇文章写的非常好:

Paho -物联网 MQTT C Cient的实现和详解_宁静致远2021的博客-CSDN博客_mqttclient_create

下面我的问题是:

int msgarrvd(void *context, char *topicName, int topicLen, MQTTClient_message *message)

    int i;
    char* payloadptr;
 
    printf("Message arrived\\n");
    printf("     topic: %s\\n", topicName);
    printf("   message: ");
 
    payloadptr = message->payload;
    if(strcmp(payloadptr, DISCONNECT) == 0)
        printf(" \\n out!!");
        CONNECT = 0;
   
    
    for(i=0; i<message->payloadlen; i++)
   
        putchar(*payloadptr++);
   
    printf("\\n");
    //我想在这发布一个主题

  //send message code,这里我省略
    MQTTClient_freeMessage(&message);
    MQTTClient_free(topicName);
    return 1;

我想在收到消息后在发布一个消息,看上面的注释地方,但是调用这个发布主题就导致没法接收和发送主题了。经过测试发现,关键代码

    MQTTClient_publishMessage(client, TOPIC, &pubmsg, &token);
    printf("Waiting for up to %d seconds for publication of %s\\n"
            "on topic %s for client with ClientID: %s\\n",
            (int)(TIMEOUT/1000), PAYLOAD, TOPIC, CLIENTID);
    rc = MQTTClient_waitForCompletion(client, token, TIMEOUT);
 

只要把MQTTClient_waitForCompletion这个函数注释掉后,在接受到消息后发布消息就不存在问题,而且双方都可以接收到消息。

以上是关于[C++][ubuntu][原创]Mqtt通信在订阅信息收到的函数里面不能发送发布消息解决方法的主要内容,如果未能解决你的问题,请参考以下文章

Ubuntu 16.04安装测试MQTT Mosquitto

Linux C的MQTT测试代码编写 - 跨主机的MQTT客户端通信

ubuntu16.04 mosquitto版本多少

[ubuntu][原创]ubuntu上pcl安装C++版

Mqtt开发笔记:windows下C++ ActiveMQ客户端介绍编译和使用

[C++][原创]ubuntu上C++发送http请求get和post