为什么MQTT-CLIENT-SUB 订阅回调Msgarrvd会收到非订阅的topic数据?

MQTTClient                g_MqttClient; //MQTT客户端

MQTTClient_createOptions  g_MqttCreateOptions = MQTTClient_createOptions_initializer;

MQTTClient_connectOptions g_MqttConnOpts = MQTTClient_connectOptions_initializer;

MQTTClient_message        g_MqttPubMsg = MQTTClient_message_initializer;

MQTTClient_deliveryToken  g_MqttToken; //声明消息token

 

#define  MQTT_SERVER_ADDRESS                 "tcp://localhost:1883" 

#define  MQTT_CLIENTID                        "MQTT_ClientID"  

#define  MQTT_QOS                             0x01 

#define  MQTT_TIMEOUT                         10000L //超时时间

#define  MQTT_KEEP_ALIVE_INTERVAL             20

#define  MQTT_CLEACN_SESSION                  1

#define  MQTT_USERNAME                        "admin"

#define  MQTT_PASSWD                          "admin"

#define  MQTT_RETAINED                         0

#define  MQTT_SUB_CONFIG_TOPIC                 "test-topic"

 

void MQTT_Sub_Delivered(void *context, MQTTClient_deliveryToken dt)
{
        g_MqttDeliveredToken = dt;
}

int MQTT_Sub_Msgarrvd(void *context, char *topicName, int topicLen, MQTTClient_message *message)
{
        char *payloadptr = NULL;

        payloadptr = message->payload;

        printf("Mqtt Sub Msg Arrived.\nTopic:\n%s\nMsg:\n%s\n", topicName, payloadptr);

        MQTTClient_freeMessage(&message);

        MQTTClient_free(topicName);

        return 0;

}

void MQTT_Sub_Connlost(void *context, char *cause)
{
        return;
}

//创建客户端

void NSM_MQTTClient_Creat(void)
{

    int rc;

    //创建一个客户端MQTT_CLIENTID

    rc = MQTTClient_create(&g_MqttClient, MQTT_SERVER_ADDRESS, MQTT_CLIENTID, MQTTCLIENT_PERSISTENCE_NONE, NULL);

    if (rc != MQTTCLIENT_SUCCESS)

    {

    printf("MQTT Failed to create client, return code %d\n", rc);

    }



    //设置订阅回调函数:先设置回调再进行客户端连接

    rc = MQTTClient_setCallbacks(g_MqttClient, NULL, MQTT_Sub_Connlost, MQTT_Sub_Msgarrvd, MQTT_Sub_Delivered);

    if (rc != MQTTCLIENT_SUCCESS)

    {

    printf("MQTT Client Failed to set callbacks, return code %d\n", rc);

    }



    g_MqttConnOpts.keepAliveInterval = MQTT_KEEP_ALIVE_INTERVAL;        //todo 宏定义

    g_MqttConnOpts.cleansession = MQTT_CLEACN_SESSION;

    g_MqttConnOpts.username = MQTT_USERNAME;

    g_MqttConnOpts.password = MQTT_PASSWD;

 

    //客户端连接服务器

    rc = MQTTClient_connect(g_MqttClient, &g_MqttConnOpts);

    if (rc != MQTTCLIENT_SUCCESS)

    {

        printf("MQTT Client Connect Fail,Error Code:%d", rc);

    }

}


//判断是否已经建立连接,若没有则进行连接

void NSM_MQTTClient_AutoConncet(void)

{

    int rc ;


    //连接服务器

    if(!MQTTClient_isConnected(g_MqttClient))

    {

        rc = MQTTClient_connect(g_MqttClient, &g_MqttConnOpts);


        if (rc != MQTTCLIENT_SUCCESS) //连接超时时间

        {

            printf("MQTT Client Connect Fail,Error Code:%d", rc);

        }

    }

}

 


//订阅处理

void NSM_MQTTClient_Subscribe(void)

{

    int rc;


    rc = MQTTClient_subscribe(g_MqttClient, MQTT_SUB_CONFIG_TOPIC, MQTT_QOS);


    //rc = MQTTClient_subscribeMany(g_MqttClient, MQTT_CLIENT_SUB_TOPIC_CNT,     g_MqttClientSubTopic, g_MqttClientSubQos); //订阅消息


    if (rc != MQTTCLIENT_SUCCESS)

    {

        printf("Failed to subscribe, return code %d\n", rc);

    }

}

 

//取消订阅,断开连接并清除客户端

void NSM_MQTTClient_DestoryAndDisconnect(void)

{

    int rc;



    rc = MQTTClient_unsubscribe(g_MqttClient, MQTT_SUB_CONFIG_TOPIC);



    if (rc != MQTTCLIENT_SUCCESS) //取消订阅

    {

    printf("MQTT Client Failed to unsubscribe, return code %d\n", rc);

    }



    MQTTClient_disconnect(g_MqttClient, MQTT_TIMEOUT);       //断开连接

 

    MQTTClient_destroy(&g_MqttClient);      //清除客户端



}

 



int main()

{


    NSM_MQTTClient_Creat();  



    while (1)

    {

 
        NSM_MQTTClient_AutoConncet();


        NSM_MQTTClient_Subscribe();

    }


    NSM_MQTTClient_DestoryAndDisconnect();


    return 0;

}



 现在出现一个问题,就是,在msg arrived函数里收到的数据,有些并不是订阅的topic发来的数据,一直接收打印其他无效的数据,影响了正常数据的接收处理,一时找不到原因,很苦恼。

疯狂打印这个东西

Topic:
 Msg:B
Mqtt Sub Msg Arrived.
Topic:nload/paho.mqtt.c/src/LinkedList.c
 Msg:\
Mqtt Sub Msg Arrived.
Topic:
 Msg:B
Mqtt Sub Msg Arrived.
Topic:nload/paho.mqtt.c/src/LinkedList.c
 Msg:\
Mqtt Sub Msg Arrived.
Topic:
 Msg:B
Mqtt Sub Msg Arrived.
Topic:nload/paho.mqtt.c/src/LinkedList.c
 Msg:\
Mqtt Sub Msg Arrived.
Topic:
 Msg:B
Mqtt Sub Msg Arrived.
Topic:nload/paho.mqtt.c/src/LinkedList.c
 Msg:\

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值