一.基本函数

1.keepalive=10设置对话断线后存活时间为10秒

mosquitto_connect(mosq_sub, mqtt_host, mqtt_port, keepalive)

2.客户端连接成功执行这个回调函数

void on_connect_wrapper(struct mosquitto *mosq, void *userdata, int rc)

3.客户端订阅成功

void on_subscribe_wrapper(struct mosquitto *mosq, void *userdata, int mid, int
qos_count, const int *granted_qos)

3.断线10秒后,客户端离线超时执行这个回调函数

void disconnect_wrapper(struct mosquitto *mosq, void *userdata, int rc)

二.函数测试

1.启动mqtt应用程序

当客户端连接成功会执行on_connect_wrapper

当客户端订阅成功会执行on_subscribe_wrapper



2.模拟MQTT断线情况,将虚拟机的网络断开,超多10秒后会执行  disconnect_wrapper回调函数



 



3.
当网络恢复后,MQTT会从新建立连接,连接成功,会执行on_connect_wrapper,要注意要将之前的topic重新订阅,否则接受不到消息。重新订阅成功也会执行on_subscribe_wrapper这个回调函数



void on_connect_wrapper(struct mosquitto *mosq, void *userdata, int rc){
    bool clean_session = true;
    int ret = 0;
     int qos = 0;
      int mid = 2;
    printf("on_connect_wrapper------------------\n");
    // resub
    if(flag_disconnect == 1){
        printf("reconnect_wrapper------------------\n");
        mosquitto_subscribe(mosq_sub, &mid,"/aliyun/vpn/#", qos);
        printf("resub OK\n");
        }
    flag_disconnect = 0;