VC++ 二次开发 paho-mqtt3a(异步库)实现断线自动重连

void connlost(void *context, char *cause)
{

}

void onConnectFailure(void* context, MQTTAsync_failureData* response)
{

}
 
 
void onConnect(void* context, MQTTAsync_successData* response)
{

 
}
void onReconnected(void* context, char* cause)
{
	
}
int MqttInit(MQTTAsync* MqClientHandle, char * BrokerUrl, char * Username, char * Password, char * Clientid, unsigned int Timerval)

{
	OutputDebugString("[INFO]MqttInit in");
	int ret = 0;
	MQTTAsync client;
	MQTTAsync_connectOptions conn_opts = MQTTAsync_connectOptions_initializer;
	MQTTAsync * temp = MqClientHandle;
//  同步
//	ret = MQTTClient_create(temp, BrokerUrl, Clientid, MQTTCLIENT_PERSISTENCE_NONE, NULL);
//  异步	
	ret = MQTTAsync_create(temp, BrokerUrl, Clientid, MQTTCLIENT_PERSISTENCE_NONE, NULL);
	if (ret != MQTTCLIENT_SUCCESS)	
	{
		OutputDebugString("[INFO] 33MQTTClient_create != MQTTCLIENT_SUCCESS");
		return -1;
		
	}
	MQTTAsync_setCallbacks(temp, NULL, connlost, NULL, NULL);
	conn_opts.username = Username;//mqtt用户名 
	conn_opts.password = Password;//密码
	conn_opts.keepAliveInterval = 20;//长连接保活时间标识
	conn_opts.cleansession = 1;
	conn_opts.onSuccess = onConnect;//连接成功响应函数
	conn_opts.onFailure = onConnectFailure;//连接失败响应函数
	conn_opts.context = client;
	//本章重点 设置重连
   	conn_opts.automaticReconnect = 1; //设置为true开启崇丽娜
	conn_opts.minRetryInterval = 10; //重连间隔时间
	conn_opts.maxRetryInterval = 365*24*60*60;//最大间隔时间,会累计的
    //
	if ((ret = MQTTAsync_connect(*temp, &conn_opts)) != MQTTASYNC_SUCCESS)
	{
		CString str;
		str.Format("[INFO] Failed to start connect, return code %d\n", ret);
		OutputDebugString(str);
		//连接不成功
	}
    //每次重连都会进去onReconnected()函数
	if ((ret = MQTTAsync_setConnected(*temp, *temp, onReconnected)) != MQTTASYNC_SUCCESS)
	 {
	 
         OutputDebugString("[INFO] Failed to MQTTAsync_setConnected, return code %d\n");
	     ret = EXIT_FAILURE;
	  
	 }
	if (Timerval > 7200) { Timerval = 7200; }
	
	if (Timerval < 30) { Timerval = 30; }
	
	conn_opts.username = Username;
	
	conn_opts.password = Password;
	
	conn_opts.cleansession = 1;
	
	conn_opts.connectTimeout = 15;
	
	conn_opts.keepAliveInterval = Timerval;

	if (ret != MQTTCLIENT_SUCCESS)
		
	{
		OutputDebugString("[INFO](MQTTClient_connect != MQTTCLIENT_SUCCESS");
		log.Format("[INFO]-%d",ret);
		OutputDebugString(log);
		return ret;
		
	}
	OutputDebugString("[INFO]MqttInit Out");
	return 0;
	
}

 此次开发采用的是paho-mqtt3a异步库,也采用过paho-mqtt3c同步库但是连接不上会阻塞住导致不断连接内存增加,也可能是代码问题,但是如果没有特殊要求建议采用异步库,如果有人需要代码或者通信库留言即可。

再推荐大家一个特别简单好用本地MQTT服务器使用方法只需要一行代码就行就可以启动服务。 

界面展示(需要留言即可)

MQTT协议特点

MQTT是一个基于客户端-服务器的消息发布/订阅传输协议。

MQTT协议是轻量、简单、开放和易于实现的,这些特点使它适用范围非常广泛。在很多情况下,包括受限的环境中,如:机器与机器(M2M)通信和物联网(IoT)。

其在,通过卫星链路通信传感器、偶尔拨号的医疗设备、智能家居、及一些小型化设备中已广泛使用。

MQTT协议当前版本为,2014年发布的MQTT v3.1.1。除标准版外,还有一个简化版MQTT-SN,该协议主要针对嵌入式设备,这些设备一般工作于TCP/IP网络,如:ZigBee。

MQTT 与 HTTP 一样,MQTT 运行在传输控制协议/互联网协议 (TCP/IP) 堆栈之上。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值