无法订阅mqtt中的多个主题

问题描述:

我运行订阅“Hello World”的简单mqtt发布者c代码。无法订阅mqtt中的多个主题

MQTT SUBSCRIBER1:

mosquitto_sub -h xx.xx.xx.xx -t "mq_test" 

。连续我运行相同的MQTT发布者的代码在另一个位置,并用不同的主题,以相同的主机订阅。

MQTT subscriber2用户:

mosquitto_sub -h xx.xx.xx.xx -t "mq_t" 

当我开始第二个发行计划,第一MQTT订阅停止。 为什么会出现这个问题,我认为可以订阅多个主题。

MQTT出版商的C代码:

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 
#include <MQTTClient.h> 
#define ADDRESS  "tcp://xx.xx.xx.xx:abcd" 
#define CLIENTID "ExampleClientPub" 
#define TOPIC  "mq_test" //"mq_t" 
#define PAYLOAD  "Hello World!" 
#define QOS   1 
#define TIMEOUT  10000L 
int main(int argc, char* argv[]) 
{ 
    MQTTClient client; 
    MQTTClient_connectOptions conn_opts = MQTTClient_connectOptions_initializer; 
    int rc = 0; 
    MQTTClient_create(&client, ADDRESS, CLIENTID, 
     MQTTCLIENT_PERSISTENCE_NONE, NULL); 
    conn_opts.keepAliveInterval = 5; 
    conn_opts.cleansession = 1; 
    if ((rc = MQTTClient_connect(client, &conn_opts)) != MQTTCLIENT_SUCCESS) 
    { 
     printf("Failed to connect, return code %d\n", rc); 
     exit(EXIT_FAILURE); 
    } 
    MQTTClient_message pubmsg = MQTTClient_message_initializer; 
    MQTTClient_deliveryToken token; 
    while(1){ 
     rc = 0; 
     pubmsg.payload = PAYLOAD; 
     pubmsg.payloadlen = strlen(PAYLOAD); 
     pubmsg.qos = QOS; 
     pubmsg.retained = 0; 
     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); 
     printf("Message with delivery token %d[%d] delivered\n", token,rc); 
    } 
    MQTTClient_disconnect(client, 10000); 
    MQTTClient_destroy(&client); 
    return rc; 
} 
+0

您可以添加订阅代码片段吗? – Vardit

您正在使用多个MQTT发布者相同的代码只有在这两个出版商不断变化的主题和客户端ID保留通过给不同的客户端ID为same.please试用方案出版商。

+0

谢谢你的帮助。它解决了我的问题。 – student

#define CLIENTID "ExampleClientPub" 

每个应用程序/程序连接到MQTT代理需要自己独特的clientId。
即“MyClnt001”,“MyClnt002”,“MyClnt003”等。

+0

这种方法解决了我的问题。谢谢 – student