MQTTClient_createWithOptions连接TCP,域名www.evcsi.cn,端口20090,协议mqtt,连接MQTTX软件
时间: 2025-03-19 20:04:55 浏览: 28
### 使用 `MQTTClient_createWithOptions` 函数实现 TCP 连接
为了通过 `MQTTClient_createWithOptions` 函数创建一个基于 TCP 的 MQTT 客户端并连接到指定的域名 (`www.evcsi.cn`) 和端口 (`20090`),可以按照以下方法进行操作。
#### 参数说明
`MQTTClient_createWithOptions` 是 Paho MQTT C 库中的一个重要函数,用于创建具有特定选项的客户端实例。以下是该函数的关键参数解释:
- **clientId**: 唯一标识符,确保每个设备都有不同的 clientId[^2]。
- **uri**: 表示目标服务器地址,格式通常为 `tcp://<hostname>:<port>` 或者 `ssl://<hostname>:<port>`。
- **options**: 创建客户端时使用的额外选项结构体,例如超时时间、传输方式等。
#### 示例代码
下面是一个完整的代码片段,展示如何使用 `MQTTClient_createWithOptions` 来建立 TCP 连接,并设置必要的回调函数以便与 MQTTX 软件交互。
```c
#include "MQTTClient.h"
#define ADDRESS "tcp://www.evcsi.cn:20090"
#define CLIENTID "TestClient_12345" // 确保唯一性
#define TOPIC "test/topic"
#define PAYLOAD "Hello from MQTT Client!"
#define QOS 1
#define TIMEOUT 10000L
int main(void) {
MQTTClient client;
MQTTClient_connectOptions conn_opts = MQTTClient_connectOptions_initializer;
int rc;
// 初始化客户端
MQTTClient_createWithOptions(&client, ADDRESS, CLIENTID,
MQTTCLIENT_PERSISTENCE_NONE, NULL);
// 设置连接选项
conn_opts.keepAliveInterval = 20; // 保持活动间隔时间为 20 秒
conn_opts.cleansession = 1; // 清理会话标志设为 true
// 尝试连接到 Broker
if ((rc = MQTTClient_connect(client, &conn_opts)) != MQTTCLIENT_SUCCESS) {
printf("Failed to connect, return code %d\n", rc);
exit(EXIT_FAILURE);
}
// 发布消息
MQTTClient_message pubmsg = MQTTClient_message_initializer;
pubmsg.payload = PAYLOAD;
pubmsg.payloadlen = strlen(PAYLOAD);
pubmsg.qos = QOS;
pubmsg.retained = 0;
MQTTClient_deliveryToken token;
MQTTClient_publishMessage(client, TOPIC, &pubmsg, &token);
// 订阅主题
MQTTClient_subscribe(client, TOPIC, QOS);
// 断开连接前等待一段时间
sleep(5);
// 正常断开连接
MQTTClient_disconnect(client, 1000);
MQTTClient_destroy(&client);
return EXIT_SUCCESS;
}
```
#### 关键点解析
1. **URI 格式**
URI 地址应遵循标准格式 `tcp://<hostname>:<port>`,其中 `<hostname>` 替换为目标服务器的实际主机名或 IP 地址,而 `<port>` 则替换为对应的端口号[^1]。
2. **ClientId 唯一性**
每个客户端都需要有一个唯一的 clientId。如果多个设备共享相同的 clientId,则会引发冲突错误 (如 `-8`)。
3. **连接选项初始化**
使用默认初始值来填充 `MQTTClient_connectOptions` 结构体变量,随后调整所需的字段(比如 keep-alive 时间和 clean session 标志)。
4. **发布/订阅功能**
上述程序展示了基本的消息发布流程以及简单的主题订阅逻辑。实际应用中可能还需要处理更复杂的场景,例如持久化存储或者 SSL 加密支持。
---
###
阅读全文
相关推荐
















