c - 使用 c 通过 mqtt 将 sqlite 数据库读取到 mqtt 代理
问题描述
我想读取一个 sqlite3 db 文件,用于通过 mqtt 的数据连接将数据从嵌入式设备发送到 c 语言的 mqtt 代理。
我收到错误“连接失败,返回代码 5”
谁能帮我纠正这个代码
提前致谢
#include <stdlib.h>
#include <string.h>
#include <MQTTClient.h>
#include <sqlite3.h>
#define ADDRESS "tcp:localhost:1883"
#define CLIENTID "......"
#define USERNAME "....."
#define PASSWORD "....."
#define TOPIC "..."
#define QOS 1
#define TIMEOUT 10000L
static int callback(void *NotUsed, int argc, char* argv[],char **azColName)
{
int i;
for(i = 0; i<argc; i++) {
printf("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL");
}
}
int main() {
int rc;
MQTTClient client;
MQTTClient_connectOptions conn_opts = MQTTClient_connectOptions_initializer;
MQTTClient_message pubmsg = MQTTClient_message_initializer;
MQTTClient_deliveryToken token;
MQTTClient_create(&client, ADDRESS, CLIENTID,
MQTTCLIENT_PERSISTENCE_NONE, NULL);
conn_opts.username = USERNAME;
conn_opts.password = PASSWORD;
conn_opts.keepAliveInterval = 20;
conn_opts.cleansession = 1;
if ((rc = MQTTClient_connect(client, &conn_opts)) != MQTTCLIENT_SUCCESS)
{
printf("Failed to connect, return code %d\n", rc);
exit(EXIT_FAILURE);
}
pubmsg.qos = QOS;
pubmsg.retained = 0;
sqlite3 *db;
char *zErrMsg = 0;
char *sql;
const char* data = "Callback function called";
rc = sqlite3_open("db/dht.db", &db);
sql = "SELECT * from table";
rc = sqlite3_exec(db, sql, callback, (void*)data, &zErrMsg);
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: \n",
(int)(TIMEOUT/1000), TOPIC, CLIENTID);
rc = MQTTClient_waitForCompletion(client, token, TIMEOUT);
printf("Message with delivery token %d delivered\n", token);
sqlite3_close(db);
return 0 ;
}
解决方案
来自 Paho C文档
MQTTClient_connect()
int MQTTClient_connect(MQTTClient handle, MQTTClient_connectOptions* options)
此函数尝试使用指定的选项将先前创建的客户端(请参阅 MQTTClient_create())连接到 MQTT 服务器。如果要启用异步消息和状态通知,则必须在 MQTTClient_connect() 之前调用 MQTTClient_setCallbacks()。
参数
- handle 成功调用 MQTTClient_create() 后的有效客户端句柄。
- options 指向有效 MQTTClient_connectOptions 结构的指针。
退货
如果客户端成功连接到服务器,则为 MQTTCLIENT_SUCCESS。如果客户端无法连接到服务器,则会返回错误代码。MQTT 协议返回大于 0 的错误码:
- 1:连接被拒绝:不可接受的协议版本
- 2:连接被拒绝:标识符被拒绝
- 3:连接被拒绝:服务器不可用
- 4:连接被拒绝:用户名或密码错误
- 5:连接被拒绝:未授权
- 6-255:保留供将来使用
返回码 5 表示“未授权”,这意味着您的用户名/密码错误。
推荐阅读
- sql-server - 找不到 SQL Server bak 文件
- ios - 人们如何使用我自己创建的 IOS 应用程序?我在苹果没有付费账户
- azure-active-directory - 用于 azure 广告的一次性登录网址?
- angular - Mat-tab material angular6 selectedIndex doesn't work with *ngFor
- asp.net - 使用 Visual Studio 2017 通过控制器发布到数据库
- mysql - 每个学生的出席情况
- php - 会话变量问题
- concurrency - “读者-作者”只是具有多个消费者的“生产者-消费者”吗?
- android - 为什么我们在 Android 中完成使用 cursor 后需要做 cursor.close()?
- php - laravel 5.6 中的多个重定向