MQTTClient_willOptions定义客户端的MQTT “Last Will and Testament” (LWT)设置。 如果客户端意外失去与服务器的连接,服务器将代表客户端将LWT消息发布到LWT主题。 这使其他客户端(已订阅LWT主题)可以知道该客户端已断开连接。 为了为特定客户端启用LWT功能,在将客户端连接到服务器的MQTTClient_connect()调用中使用的MQTTClient_connectOptions结构中传递了指向MQTTClient_willOptions结构的有效指针。 如果不需要LWT函数,则可以将指向MQTTClient_willOptions的指针设置为NULL。
LWT payload格式

struct{int len;const void* data;
}payload;

Data Fields

Type Data Description
char struct_id [4] The eyecatcher for this structure. must be MQTW.
int struct_version The version number of this structure. Must be 0 or 1 0 means there is no binary payload option
const char * topicName The LWT topic to which the LWT message will be published.
const char * message The LWT payload in string form.
int retained The retained flag for the LWT message
int qos The quality of service setting for the LWT message.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include "MQTTClient.h"
#define ADDRESS     "tcp://192.168.1.101:1883"
#define CLIENTID    "ExampleClientPub"
#define TOPIC       "MQTT_Examples"
#define PAYLOAD     "Hello MQTT!"
#define QOS         1
#define TIMEOUT     10000L#define LAST_WILL_TOPIC "Hello_Will"
#define LAST_WILL_MSG "take care yourself"int main(int argc, char* argv[])
{MQTTClient client;MQTTClient_connectOptions conn_opts = MQTTClient_connectOptions_initializer;MQTTClient_message pubmsg = MQTTClient_message_initializer;MQTTClient_willOptions will_opts = MQTTClient_willOptions_initializer;MQTTClient_deliveryToken token;int rc;MQTTClient_create(&client, ADDRESS, CLIENTID,MQTTCLIENT_PERSISTENCE_NONE, NULL);conn_opts.keepAliveInterval = 20;conn_opts.cleansession = 1;will_opts.topicName = LAST_WILL_TOPIC;will_opts.message = LAST_WILL_MSG;conn_opts.will = &will_opts;if ((rc = MQTTClient_connect(client, &conn_opts)) != MQTTCLIENT_SUCCESS){printf("Failed to connect, return code %d\n", rc);exit(EXIT_FAILURE);}pubmsg.payload = PAYLOAD;pubmsg.payloadlen = strlen(PAYLOAD);pubmsg.qos = QOS;pubmsg.retained = 0;while (1){MQTTClient_publishMessage(client, TOPIC, &pubmsg, &token);printf("Waiting for up to %d seconds for publication of %s\n""on topic %s for client with ClientID: %s\n",(int)(TIMEOUT/1000), PAYLOAD, TOPIC, CLIENTID);rc = MQTTClient_waitForCompletion(client, token, TIMEOUT);printf("Message with delivery token %d delivered\n", token);sleep(1);}MQTTClient_disconnect(client, 10000);MQTTClient_destroy(&client);return rc;
}

【MQTT编程】Last will and Testament(LWT Payload设置)相关推荐

  1. 扇贝python编程课_扇贝编程app下载-扇贝编程手机版python「附如何设置自由职业」 - 超好玩...

    扇贝编程app是一款学程序的初学者们都爱用的编程学习软件,软件汇集从入门到应用一应俱全.扇贝编程手机版python「附如何设置自由职业」常见的编程语言及技术教程,学习查询两不误!更有专业的编程导师手把 ...

  2. 鸿蒙系统是单任务还是多任务,在鸿蒙系统上使用MQTT编程

    我们使用的是paho mqtt软件包,这里介绍一下怎么使用mqtt协议编程.关于鸿蒙系统的mqtt移植好的软件包,相关github链接如下: https://gitee.com/qidiyun/har ...

  3. 《JavaScript面向对象编程指南》——1.7 训练环境设置

    本节书摘来自异步社区<JavaScript面向对象编程指南>一书中的第1章,第1.7节,作者: [加]Stoyan Stefanov 译者: 凌杰 更多章节内容可以访问云栖社区" ...

  4. [转载]unix环境高级编程备忘:理解保存的设置用户ID,设置用户ID位,有效用户ID,实际用户ID...

    转载自http://www.cnblogs.com/stemon/p/5287631.html 一.基本概念 实际用户ID(RUID):用于标识一个系统中用户是谁,一般是在登录之后,就被唯一的确定,就 ...

  5. c# 第七节 编程规范,vs中的各种设置

    本节内容: 1:编程规范 2:vs中的各种设置 3:一个解决方案多个项目的创建.使用 1:编程规范 需要规范的地方: 1: 2: 2:vs中的各种设置 实现: 3:一个解决方案多个项目的创建.使用 转 ...

  6. Winsock网络编程头文件及库文件的设置

    Winsock是Windows下网络编程的规范.使用Winsock可以实现基于TCP或UDP的通信. 1 Winsock版本 Winsock主要包含两个版本,即Winsock1和Winsock2.Wi ...

  7. kotlin设置按钮不可点击_跟编程探索家学APP开发:设置APP首页的基础结构

    我是编程探索家阿源.大家如果想继续跟着学做一款APP(安卓+苹果双版本),请关注西瓜视频或者头条号:编程探索家. 先看一下我们这个系列教程需要做出来的APP效果: 1. 打开Android Studi ...

  8. 【Java 网络编程】TCP 数据传输示例 ( 客户端参数设置 | 服务器端参数设置 | ByteBuffer 存放读取数据类型 )

    文章目录 I 客户端代码示例 II 服务器端代码示例 III 运行结果 I 客户端代码示例 import java.io.IOException; import java.io.InputStream ...

  9. linux系统串口设置参数,linux 串口编程记录(一)串口参数设置(示例代码)

    一些常用串口属性的设置方法. 设置流控制 termios_new.c_cflag &= ~CRTSCTS; //不使用流控制 termios_new.c_cflag |= CRTSCTS; / ...

  10. C++socket编程(六):6.1 设置socket的阻塞和非阻塞

    在完成了tcp的客户端和服务端的连接和数据通信之后,我们要想到下面的问题.超时处理,因为网络并不是可靠的,存在各种异常情况.我们如何判断并处理这种异常情况,就变得很重要了. 如下问题:如果我的客户端c ...

最新文章

  1. 修改密码后服务器断开连接,SSH无需密码登录服务器且保持连接不断开的方法
  2. FB高管:计划明年推出数字货币Diem和数字钱包Novi
  3. char、Varchar、nvarchar、ntext (转)
  4. 互联网1分钟 |1214
  5. Python中Function(函数)和methon(方法)
  6. HDU 2255 二分图最佳匹配 模板题
  7. “睡服”面试官系列第二十篇之generator函数的异步应用(建议收藏学习)
  8. 【转】1.C Task.CompletedTask和Task.Result小记
  9. 如果简历上真写了“会多线程”,那面试一般会被怎么问?
  10. linux上NFS性能参数
  11. hdu I Hate It
  12. 计算机操作系统在线阅读,计算机操作系统3-1.ppt
  13. html5 json.stringify,JSON.stringify()妙用
  14. 国内一些比较大型的IT软件外包公司名单
  15. 连接本地数据库和远程连接他人数据库?
  16. 股票历史数据-股票历史数据在线查询系统
  17. 温度传感器的分类及比较
  18. AcFun_API 之 分页读取番剧列表
  19. ORACLE违反协议异常
  20. centos cpu排查_Linux/CENTOS 系统 CPU 占用率较高负载较高问题排查思路 - 沃森博客...

热门文章

  1. 运用R语言绘制火山图
  2. 医学自然语言处理(NLP)相关论文汇总之 NAACL 2022
  3. 前端实现PDF预览打印
  4. 电商项目数据库表的学习及数据库表结构设计
  5. JavaWeb面试题1
  6. 第三讲 信息资产的分类与控制
  7. 贴片电阻、贴片电容规格、封装、尺寸
  8. RadASM资源链接错误RC2104及找不到resource.h解决方案
  9. 岩土工程颗粒流软件PFC6.0技巧——按计算时间导出数据、图像及保存文件
  10. Spring的事务传播机制(大白话)