2017-08-28 31 views
0

"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" 

私は2番目パブリッシャープログラムを開始し、最初のMQTTサブスクリプションが停止します。 この問題が発生する理由は、複数のトピックを購読することが可能だと思います。

MQTTのパブリッシャーCコード:あなたが唯一の両方の出版社で話題とクライアントのIDを変更することで、複数のMQTTパブリッシャーのために同じコードを使用している

#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

答えて

1

はのために異なるクライアントIDを与えることによって、シナリオを試してみるsame.please残ります出版社。

+0

ありがとうございました。それは私の問題を解決する。 – student

0
#define CLIENTID "ExampleClientPub" 

MQTTブローカに接続する各アプリケーション/プログラムには、固有のclientIdが必要です。
「MyClnt001」「MyClnt002」「MyClnt003」など

+0

この方法は私の問題を解決します。ありがとうございました – student

関連する問題