【MQTT编程】Last will and Testament(LWT Payload设置)
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设置)相关推荐
- 扇贝python编程课_扇贝编程app下载-扇贝编程手机版python「附如何设置自由职业」 - 超好玩...
扇贝编程app是一款学程序的初学者们都爱用的编程学习软件,软件汇集从入门到应用一应俱全.扇贝编程手机版python「附如何设置自由职业」常见的编程语言及技术教程,学习查询两不误!更有专业的编程导师手把 ...
- 鸿蒙系统是单任务还是多任务,在鸿蒙系统上使用MQTT编程
我们使用的是paho mqtt软件包,这里介绍一下怎么使用mqtt协议编程.关于鸿蒙系统的mqtt移植好的软件包,相关github链接如下: https://gitee.com/qidiyun/har ...
- 《JavaScript面向对象编程指南》——1.7 训练环境设置
本节书摘来自异步社区<JavaScript面向对象编程指南>一书中的第1章,第1.7节,作者: [加]Stoyan Stefanov 译者: 凌杰 更多章节内容可以访问云栖社区" ...
- [转载]unix环境高级编程备忘:理解保存的设置用户ID,设置用户ID位,有效用户ID,实际用户ID...
转载自http://www.cnblogs.com/stemon/p/5287631.html 一.基本概念 实际用户ID(RUID):用于标识一个系统中用户是谁,一般是在登录之后,就被唯一的确定,就 ...
- c# 第七节 编程规范,vs中的各种设置
本节内容: 1:编程规范 2:vs中的各种设置 3:一个解决方案多个项目的创建.使用 1:编程规范 需要规范的地方: 1: 2: 2:vs中的各种设置 实现: 3:一个解决方案多个项目的创建.使用 转 ...
- Winsock网络编程头文件及库文件的设置
Winsock是Windows下网络编程的规范.使用Winsock可以实现基于TCP或UDP的通信. 1 Winsock版本 Winsock主要包含两个版本,即Winsock1和Winsock2.Wi ...
- kotlin设置按钮不可点击_跟编程探索家学APP开发:设置APP首页的基础结构
我是编程探索家阿源.大家如果想继续跟着学做一款APP(安卓+苹果双版本),请关注西瓜视频或者头条号:编程探索家. 先看一下我们这个系列教程需要做出来的APP效果: 1. 打开Android Studi ...
- 【Java 网络编程】TCP 数据传输示例 ( 客户端参数设置 | 服务器端参数设置 | ByteBuffer 存放读取数据类型 )
文章目录 I 客户端代码示例 II 服务器端代码示例 III 运行结果 I 客户端代码示例 import java.io.IOException; import java.io.InputStream ...
- linux系统串口设置参数,linux 串口编程记录(一)串口参数设置(示例代码)
一些常用串口属性的设置方法. 设置流控制 termios_new.c_cflag &= ~CRTSCTS; //不使用流控制 termios_new.c_cflag |= CRTSCTS; / ...
- C++socket编程(六):6.1 设置socket的阻塞和非阻塞
在完成了tcp的客户端和服务端的连接和数据通信之后,我们要想到下面的问题.超时处理,因为网络并不是可靠的,存在各种异常情况.我们如何判断并处理这种异常情况,就变得很重要了. 如下问题:如果我的客户端c ...
最新文章
- 修改密码后服务器断开连接,SSH无需密码登录服务器且保持连接不断开的方法
- FB高管:计划明年推出数字货币Diem和数字钱包Novi
- char、Varchar、nvarchar、ntext (转)
- 互联网1分钟 |1214
- Python中Function(函数)和methon(方法)
- HDU 2255 二分图最佳匹配 模板题
- “睡服”面试官系列第二十篇之generator函数的异步应用(建议收藏学习)
- 【转】1.C Task.CompletedTask和Task.Result小记
- 如果简历上真写了“会多线程”,那面试一般会被怎么问?
- linux上NFS性能参数
- hdu I Hate It
- 计算机操作系统在线阅读,计算机操作系统3-1.ppt
- html5 json.stringify,JSON.stringify()妙用
- 国内一些比较大型的IT软件外包公司名单
- 连接本地数据库和远程连接他人数据库?
- 股票历史数据-股票历史数据在线查询系统
- 温度传感器的分类及比较
- AcFun_API 之 分页读取番剧列表
- ORACLE违反协议异常
- centos cpu排查_Linux/CENTOS 系统 CPU 占用率较高负载较高问题排查思路 - 沃森博客...