一.基本函数
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;
     
 } 
  
热门工具 换一换
