printf 应用注意和 mosquitto loop简单说明

 1.

       printf("Invalid");  只是把消息放在缓存中

         fflush(stdout);  这个强制把缓存的信息输出


2.   mosquitto_loop(mosq, -1, 1);  如果把 第二位的形参改为-1,就不会退出,如果改为其它的数值会超时退出


 另话的话,有一个

mosquitto_loop_forever(mosq, -1, 1);  这个资料上说,好像是会自动处理重联。

### C语言中使用Mosquitto库实现自动重连 在嵌入式开发领域,`mosquitto` 是一种常用的 MQTT 客户端库,用于消息传递设备间通信。为了确保网络连接的稳定性,在实际应用中通常需要实现客户端的自动重连功能。 以下是基于 `libmosquitto` 的 C 语言示例代码,展示如何通过回调函数处理断线事件并尝试重新连接: #### 自动重连的核心逻辑 当检测到与服务器的连接中断时,可以通过设置回调函数来捕获该事件,并调用 `mosquitto_reconnect()` 方法进行重连操作[^1]。 ```c #include <stdio.h> #include <stdlib.h> #include <string.h> #include <mosquitto.h> // 连接成功后的回调函数 void on_connect(struct mosquitto *mosq, void *obj, int rc) { if (rc == 0) { printf("Connected successfully.\n"); // 订阅主题或其他初始化工作可以在这里完成 } else { fprintf(stderr, "Connection failed with code %d.\n", rc); } } // 断开连接时的回调函数 void on_disconnect(struct mosquitto *mosq, void *obj, int rc) { if (rc != 0) { // 非正常断开 fprintf(stderr, "Unexpected disconnection. Attempting to reconnect...\n"); // 尝试立即重连 mosquitto_reconnect(mosq); } } int main(int argc, char *argv[]) { struct mosquitto *mosq; const char *host = "mqtt.example.com"; int port = 1883; // 初始化 Mosquitto 客户端实例 mosq = mosquitto_new(NULL, true, NULL); if (!mosq) { fprintf(stderr, "Error creating mosquitto instance\n"); exit(1); } // 设置回调函数 mosquitto_connect_callback_set(mosq, on_connect); mosquitto_disconnect_callback_set(mosq, on_disconnect); // 建立初始连接 if (mosquitto_connect(mosq, host, port, 60)) { fprintf(stderr, "Unable to connect to broker at %s:%d\n", host, port); mosquitto_destroy(mosq); exit(1); } // 主循环保持运行状态 while (1) { mosquitto_loop(mosq, 1000, 1); // 处理网络事件 } // 清理资源 mosquitto_destroy(mosq); return 0; } ``` 此代码片段展示了如何利用 `on_disconnect` 回调函数监听意外断开的情况,并通过 `mosquitto_reconnect()` 函数发起重连请求。 --- ### 关键点说明 - **`mosquitto_reconnect()`**: 当前会话被终止后,可调用此方法恢复与 Broker 的连接。 - **超时机制**: 如果需要更复杂的重连策略(如指数退避),可以在回调函数内部加入延迟逻辑[^1]。 - **错误码解释**: 使用 `on_disconnect` 中返回的状态码判断具体原因,从而决定是否继续执行重连动作。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

mcusun2000

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值