文章目录
- 一、初始化和清理
-
- (1)mosquitto_lib_init
- (2)mosquitto_lib_cleanup
- 二、客户创建、销毁
-
- (1)mosquitto_new
- (2)mosquitto_destroy
- 三、用户名和密码
-
- mosquitto_username_pw_set
- 四、连接、重新连接、断开连接
-
- (1)mosquitto_connect
- (2)mosquitto_reconnect
- (3)mosquitto_disconnect
- 五、发布、订阅、取消订阅
-
- (1)mosquitto_publish
- (2)mosquitto_subscribe
- (3)mosquitto_unsubscribe
- 六、网络循环(由 libmosquitto 管理)
-
- (1)mosquitto_loop_forever
- (2)mosquitto_loop_start
- (3)mosquitto_loop_stop
- (4)mosquitto_loop
- 七、回调
-
- (1)mosquitto_connect_callback_set
- (2)mosquitto_disconnect_callback_set
- (3)mosquitto_publish_callback_set
- (4)mosquitto_message_callback_set
- (5)mosquitto_subscribe_callback_set
- (6)mosquitto_unsubscribe_callback_set
- (7)mosquitto_log_callback_set
- 八、实用功能
-
- mosquitto_strerror
- 九、常见返回值
一、初始化和清理
(1)mosquitto_lib_init
int mosquitto_lib_init (NULL)
功能:初始化mosquitto,一定是别的mosqtto使用函数前。
返回值: MOSQ_ERR_SUCCESS:关于成功。 MOSQ_ERR_UNKNOWN:在 Windows 上,不能初始化套接字。
(2)mosquitto_lib_cleanup
int mosquitto_lib_cleanup (NULL)
功能:调用与库相关的资源释放。
返回值: MOSQ_ERR_SUCCESS 总是
二、客户创建、销毁
(1)mosquitto_new
struct mosquitto *mosquitto_new(const char *id, bool clean_session, void *obj)
功能:创造新的 mosquitto 客户端实例。
参数: id:用作客户端 ID 如果是 NULL,随机客户端将生成 ID。如果 id 为 NULL,则 clean_session 必须为真。
clean_session:设置为 true 断开连接时,指示代理清除所有信息和订阅。设置为 false 指示它保留它们。请注意,客户端在断开连接时永远不会丢弃自己的消息。调用mosquitto_connect或mosquitto_reconnect新闻将被重新发送。使用mosquitto_reinitialise将客户端重置为原始状态。如果 id 参数为 NULL,必须设置为 true。
obj:将作为参数传递给任何指定回调的用户指针。struct mosquitto结构类型指针。
返回值: 成功则指向struct mosquitto类型指针。失败时是 NULL。可查询 errno 确定失败的原因。
ENOMEM 内存不足。 无效输入参数 EINVAL。
(2)mosquitto_destroy
void mosquitto_destroy(struct mosquitto * mosq)
功能:用于释放和释放 mosquitto 客户端实例关联的内存。
参数:指向需要free 的 struct mosquitto指针。
三、用户名和密码
mosquitto_username_pw_set
int mosquitto_username_pw_set(struct mosquitto *mosq,
const
char
*username
,
const
char
*password
)
作用:为 mosquitto 实例配置用户名和密码。默认情况下,不会发送用户名或密码。对于 v3.1 和 v3.1.1 客户端,如果 username 为 NULL,则忽略密码参数。这必须在调用mosquitto_connect之前调用。
参数: mosq:一个有效的mosquitto实例 username:要作为字符串发送的用户名,或 NULL 以禁用身份验证。 password:作为字符串发送的密码。当用户名有效时设置为 NULL,以便仅发送用户名。
返回值:
MOSQ_ERR_SUCCESS:关于成功。 MOSQ_ERR_INVAL:如果输入参数无效。 MOSQ_ERR_NOMEM:如果发生内存不足的情况。
四、连接、重新连接、断开连接
(1)mosquitto_connect
作用:连接到 MQTT 代理。该功能适用于使用所有 MQTT 协议版本的客户端。
int mosquitto_connect( struct mosquitto *mosq, const char *host, int port, int keepalive)
参数: mosq:一个有效的mosquitto实例。 host:要连接的代理的主机名或 IP 地址。 port:要连接的网络端口。通常是 1883 。 keepalive:如果在这段时间内(秒数)没有交换其他消息,代理应该向客户端发送 PING 消息。
返回值:
MOSQ_ERR_SUCCESS:连接成功。 MOSQ_ERR_INVAL:如果输入参数无效,可以是以下任何一种: mosq == NULL host == 空 port < 0 keepalive < 5
MOSQ_ERR_ERRNO:如果系统调用返回错误。变量 errno 包含错误代码,即使在 Windows 上也是如此。在Linux情况下使用 strerror(errno) 或在 Windows 上使用 FormatMessage()。
(2)mosquitto_reconnect
int mosquitto_reconnect(struct mosquitto *mosq)
作用:重新连接到代理。此功能提供了一种在连接丢失后重新连接到代理的简单方法。它使用mosquitto_connect调用中提供的值。但不能在mosquitto_connect之前调用它。
参数: mosq:一个有效的mosquitto实例。
返回值: MOSQ_ERR_SUCCESS:关于成功。 MOSQ_ERR_INVAL:如果输入参数无效。 MOSQ_ERR_NOMEM:如果发生内存不足的情况。 MOSQ_ERR_ERRNO:如果系统调用返回错误。变量 errno 包含错误代码,即使在 Windows 上也是如此。在Linux下可使用 strerror(errno) 或在 Windows 上使用 FormatMessage()获取错误。
(3)mosquitto_disconnect
int mosquitto_disconnect(struct mosquitto *mosq)
作用:断开与代理的连接。该功能适用于使用所有 MQTT 协议版本的客户端。
参数: mosq:一个有效的mosquitto实例
返回值:
MOSQ_ERR_SUCCESS:关于成功。 MOSQ_ERR_INVAL:如果输入参数无效。 MOSQ_ERR_NO_CONN:如果客户端未连接到代理
五、发布、订阅、取消订阅
(1)mosquitto_publish
int mosquitto_publish(struct mosquitto *mosq,
int *mid,
const char *topic,
int payloadlen,
const void *payload,
int qos,
bool retain)
作用:发布关于给定主题的消息。该功能适用于使用所有 MQTT 协议版本的客户端。如果需要设置 MQTT v5 PUBLISH 属性,请改用mosquitto_publish_v5。
参数: mosq:一个有效的mosquitto实例。 mid:指向 int 的指针。如果不为 NULL,该函数会将其设置为此特定消息的消息 ID。然后可以将其与发布回调一起使用,以确定何时发送消息。请注意,尽管 MQTT 协议不对 QoS=0 的消息使用消息 ID,但 libmosquitto 会为它们分配消息 ID,以便可以使用此参数跟踪它们。 topic:要发布到的主题的以 null 结尾的字符串。 payloadlen:有效载荷的大小(字节)。有效值介于 0 和 268,435,455 之间。 payload:有效载荷,指向要发送的数据的指针。如果 payloadlen > 0 这必须是一个有效的内存位置。 qos:服务质量,整数值 0、1 或 2,指示要用于消息的服务质量。 retain:保持,设置为 true 以使消息保留。
返回值: MOSQ_ERR_SUCCESS:关于成功。 MOSQ_ERR_INVAL:如果输入参数无效。 MOSQ_ERR_NOMEM:如果发生内存不足的情况。 MOSQ_ERR_NO_CONN:如果客户端未连接到代理。 MOSQ_ERR_PROTOCOL:如果与代理通信时出现协议错误。 MOSQ_ERR_PAYLOAD_SIZE:如果 payloadlen 太大。 MOSQ_ERR_MALFORMED_UTF8:如果主题不是有效的 UTF-8 MOSQ_ERR_QOS_NOT_SUPPORTED:如果 QoS 大于代理所支持的。 MOSQ_ERR_OVERSIZE_PACKET:如果生成的数据包比代理支持的大。
(2)mosquitto_subscribe
int mosquitto_subscribe(struct mosquitto *mosq,
int *mid,
const char *sub,
int qos)
作用: 订阅一个主题。该功能适用于使用所有 MQTT 协议版本的客户端。如果需要设置 MQTT v5 SUBSCRIBE 属性,请改用mosquitto_subscribe_v5。
参数: mosq:一个有效的mosquitto实例。 mid:指向 int 的指针。如果不为 NULL,该函数会将其设置为此特定消息的消息 ID。然后可以将其与 subscribe 回调一起使用,以确定消息何时发送。 sub:订阅模式。 qos:服务质量,此订阅请求的服务质量。
返回值: MOSQ_ERR_SUCCESS:关于成功。 MOSQ_ERR_INVAL:如果输入参数无效。 MOSQ_ERR_NOMEM:如果发生内存不足的情况。 MOSQ_ERR_NO_CONN:如果客户端未连接到代理。 MOSQ_ERR_MALFORMED_UTF8:如果主题不是有效的 UTF-8 MOSQ_ERR_OVERSIZE_PACKET:如果生成的数据包比代理支持的大。
(3)mosquitto_unsubscribe
int mosquitto_unsubscribe(struct mosquitto *mosq,
int *mid,
const char *sub)
作用:退订主题。
参数: mosq:一个有效的mosquitto实例。 mid:指向 int 的指针。如果不为 NULL,该函数会将其设置为此特定消息的消息 ID。然后可以将其与取消订阅回调一起使用,以确定消息何时发送。 sub:退订模式。
返回值: MOSQ_ERR_SUCCESS:关于成功。 MOSQ_ERR_INVAL:如果输入参数无效。 MOSQ_ERR_NOMEM:如果发生内存不足的情况。 MOSQ_ERR_NO_CONN:如果客户端未连接到代理。 MOSQ_ERR_MALFORMED_UTF8:如果主题不是有效的 UTF-8 MOSQ_ERR_OVERSIZE_PACKET:如果生成的数据包比代理支持的大。
六、网络循环(由 libmosquitto 管理)
必须定期调用内部网络循环。两种推荐的方法是使用mosquitto_loop_forever或mosquitto_loop_start。 mosquitto_loop_forever是一个阻塞调用,适用于你只想在回调中处理传入消息的情况。 mosquitto_loop_start是一个非阻塞调用,它创建一个单独的线程来为您运行循环。当您需要与 MQTT 客户端同时运行其他任务时使用此功能,传感器读取数据。
(1)mosquitto_loop_forever
int mosquitto_loop_forever(struct mosquitto *mosq,
int timeout,
int max_packets)
此函数在无限阻塞循环中为您调用 loop()。这对于您只想在程序中运行 MQTT 客户端循环的情况很有用。
**如果服务器连接丢失,它会处理重新连接。**如果您在回调中调用 mosquitto_disconnect(),它将返回。
参数: mosq:一个有效的mosquitto实例。 timeout:在超时之前等待 select() 调用中的网络活动的最大毫秒数。设置为 0 以立即返回。设置负数以使用默认值 1000 毫秒。 max_packets:此参数当前未使用,应设置为 1 以便将来兼容。
返回值: MOSQ_ERR_SUCCESS:关于成功。 MOSQ_ERR_INVAL:如果输入参数无效。 MOSQ_ERR_NOMEM:如果发生内存不足的情况。 MOSQ_ERR_NO_CONN:如果客户端未连接到代理。 MOSQ_ERR_CONN_LOST:如果与代理的连接丢失。 MOSQ_ERR_PROTOCOL:如果与代理通信时出现协议错误。 MOSQ_ERR_ERRNO:如果系统调用返回错误。变量 errno 包含错误代码,即使在 Windows 上也是如此。在Linux下使用 strerror(errno) 或在 Windows 上使用 FormatMessage()获取。
(2)mosquitto_loop_start
int mosquitto_loop_start( struct mosquitto *mosq)
作用: 这是线程客户端接口的一部分。调用一次以启动一个新线程来处理网络流量。这为重复调用mosquitto_loop提供了一种替代方法。
参数: mosq:一个有效的mosquitto实例。
返回值: MOSQ_ERR_SUCCESS:关于成功。 MOSQ_ERR_INVAL:如果输入参数无效。 MOSQ_ERR_NOT_SUPPORTED:如果线程支持不可用。
(3)mosquitto_loop_stop
int mosquitto_loop_stop(struct mosquitto *mosq, bool force)
作用: 这是线程客户端接口的一部分。调用一次以停止先前使用mosquitto_loop_start创建的网络线程。此调用将阻塞,直到网络线程完成。要结束网络线程,您必须先前已调用mosquitto_disconnect或已将 force 参数设置为 true。
参数: mosq:一个有效的mosquitto实例。 force:设置为 true 以强制取消线程。如果为 false,则 mosquitto_disconnect必须已被调用。
返回值: MOSQ_ERR_SUCCESS:成功。 MOSQ_ERR_INVAL:输入参数无效。 MOSQ_ERR_NOT_SUPPORTED:线程支持不可用。
(4)mosquitto_loop
int mosquitto_loop(struct mosquitto * mosq,
int timeout,
int max_packets)
作用: 客户端的主网络循环。必须经常调用它以保持客户端和代理之间的通信正常工作。这是由mosquitto_loop_forever和mosquitto_loop_start 执行的,它们是处理网络循环的推荐方法。如果您愿意,也可以使用此功能。不能在回调中调用它。 如果存在传入数据,则将对其进行处理。传出命令,例如 mosquitto_publish,通常在调用它们的函数时立即发送,但这并不总是可能的。 mosquitto_loop还将尝试发送任何剩余的传出消息,其中还包括作为 QoS>0 消息流的一部分的命令。 这调用 select() 来监视客户端网络套接字。如果您想将 mosquitto 客户端操作与您自己的 select() 调用集成,请使用mosquitto_socket、mosquitto_loop_read、mosquitto_loop_write和mosquitto_loop_misc。
参数: mosq:一个有效的mosquitto实例。 timeout:在超时之前等待 select() 调用中的网络活动的最大毫秒数。设置为 0 以立即返回。设置负数以使用默认值 1000 毫秒。 max_packets:此参数当前未使用,应设置为 1 以便将来兼容。
返回值: MOSQ_ERR_SUCCESS:关于成功。 MOSQ_ERR_INVAL:如果输入参数无效。 MOSQ_ERR_NOMEM:如果发生内存不足的情况。 MOSQ_ERR_NO_CONN:如果客户端未连接到代理。 MOSQ_ERR_CONN_LOST:如果与代理的连接丢失。 MOSQ_ERR_PROTOCOL:如果与代理通信时出现协议错误。 MOSQ_ERR_ERRNO:如果系统调用返回错误。变量 errno 包含错误代码,即使在 Windows 上也是如此。在Linux下使用 strerror(errno) 或在 Windows 上使用 FormatMessage()获取。
七、回调
(1)mosquitto_connect_callback_set
void mosquitto_connect_callback_set(struct mosquitto *mosq,
void (*on_connect)(struct mosquitto *, void *, int))
作用: 设置连接回调。这在代理发送 CONNACK 消息以响应连接时调用。
参数: mosq:一个有效的mosquitto实例。 on_connect:函数指针,以下形式的回调函数: void callback(struct mosquitto *mosq, void *obj, int rc),在使用编写此回调函数时,一定要严格安装此参数和类型的要求。
回调参数 mosq:进行回调的 mosquitto 实例。 obj:mosquitto_new中提供的用户数据 rc:连接响应的返回码。这些值由使用的 MQTT 协议版本定义。
(2)mosquitto_disconnect_callback_set
void mosquitto_disconnect_callback_set(struct mosquitto *mosq,
void (*on_disconnect)(struct mosquitto *, void *, int))
作用:设置断开回调。当代理收到 DISCONNECT 命令并断开客户端的连接时调用。
参数: mosq:一个有效的mosquitto实例。 on_disconnect:以下形式的回调函数:void callback(struct mosquitto *mosq, void *obj)
回调参数: mosq:进行回调的 mosquitto 实例。 obj:mosquitto_new中提供的用户数据 rc:指示断开连接原因的整数值。值 0 表示客户端已调用mosquitto_disconnect。任何其他值表示断开是意外的。
(3)mosquitto_publish_callback_set
void mosquitto_publish_callback_set(struct mosquitto *mosq,
void (*on_publish)(struct mosquitto *, void *, int))
作用: 设置发布回调。当使用mosquitto_publish启动的消息已成功发送到代理时,将调用此方法。
参数: mosq:一个有效的mosquitto实例。 on_publish:以下形式的回调函数: void callback(struct mosquitto *mosq, void *obj, int mid)
回调参数: mosq:进行回调的 mosquitto 实例。 obj:mosquitto_new中提供的用户数据 mid:已发送消息的消息 ID。
(4)mosquitto_message_callback_set
void mosquitto_message_callback_set(struct mosquitto *mosq,
void (*on_message)(struct mosquitto *, void *, const struct mosquitto_message *))
作用: 设置消息回调。当从代理接收到消息时调用它。
参数: mosq:一个有效的mosquitto实例。 on_message:以下形式的回调函数:void callback(struct mosquitto *mosq, void *obj, const struct mosquitto_message *message)
回调参数: mosq:进行回调的 mosquitto 实例。 obj:mosquitto_new中提供的用户数据 message:消息数据。回调完成后,该变量和关联的内存将由库释放。客户应该复制它需要的任何数据。
(5)mosquitto_subscribe_callback_set
void mosquitto_subscribe_callback_set(struct mosquitto *mosq,
void (*on_subscribe)(struct mosquitto *, void *, int, int, const int *))
作用: 设置订阅回调。当代理响应订阅请求时调用。
参数: mosq:一个有效的mosquitto实例。 on_subscribe:以下形式的回调函数: void callback(struct mosquitto *mosq, void *obj, int mid, int qos_count, const int *granted_qos)
回调参数: mosq:进行回调的 mosquitto 实例。 obj:mosquitto_new中提供的用户数据 mid:订阅消息的消息 ID。 qos_count:授予订阅的数量(granted_qos 的大小)。 grant_qos:一个整数数组,指示每个订阅的授予 QoS。
(6)mosquitto_unsubscribe_callback_set
void mosquitto_unsubscribe_callback_set(struct mosquitto *mosq,
void (*on_unsubscribe)(struct mosquitto *, void *, int))
作用: 设置取消订阅回调。当代理响应取消订阅请求时调用它。
参数: mosq:一个有效的mosquitto实例。 on_unsubscribe:以下形式的回调函数: void callback(struct mosquitto *mosq, void *obj, int mid)
回调参数: mosq:进行回调的 mosquitto 实例。 obj:mosquitto_new中提供的用户数据 mid:取消订阅消息的消息 ID。
(7)mosquitto_log_callback_set
void mosquitto_log_callback_set(struct mosquitto *mosq,
void (*on_log)(struct mosquitto *, void *, int, const char *))
作用: 设置日志记录回调。如果您需要来自客户端库的事件日志信息,则应使用此选项。
清真寺 一个有效的mosquitto实例。 on_log 以下形式的回调函数: void callback(struct mosquitto *mosq, void *obj, int level, const char *str)
回调参数: mosq:进行回调的 mosquitto 实例。 obj:mosquitto_new中提供的用户数据 level:来自值的日志消息级别: MOSQ_LOG_INFO、 MOSQ_LOG_NOTICE、 MOSQ_LOG_WARNING、 MOSQ_LOG_ERR、 MOSQ_LOG_DEBUG str:消息字符串。
八、实用功能
mosquitto_strerror
const char *mosquitto_strerror(int mosq_errno)
作用: 调用以获取 mosquitto错误号的 const 字符串描述。
参数: mosq_errno :mosquitto错误编号。
返回值: 描述错误的常量字符串。
九、常见的返回值
MOSQ_ERR_INVAL=3 MOSQ_ERR_NOMEM=1 MOSQ_ERR_NO_CONN=4 MOSQ_ERR_MALFORMED_UTF8=18 MOSQ_ERR_OVERSIZE_PACKET=25 MOSQ_ERR_CONN_LOST=7 //如果与代理的连接丢失 MOSQ_ERR_PROTOCOL=2 //如果与代理通信时出现协议错误 MOSQ_ERR_ERRNO=14