paho.mqtt 连接失败,总是 return - 1
paho.mqtt Failed to connect, always return - 1
#define CA "/mnt/key/ca.crt"
#define CLIENT_KEY "/mnt/key/client.key"
#define CLIENT_CRT "/mnt/key/client.crt"
void onConnectFailure(void *context, MQTTAsync_failureData *response)
{
finished = 1;
printf("[CS55]Connect failed, rc %d\n", response ? response->code : 0);
delay(1000);
connect_server();
}
void connect_server()
{
if (MQTTAsync_connect(client, &conn_opts) != MQTTASYNC_SUCCESS)
{
printf("[CS55]connect_server()\n");
finished = 1;
}
}
void mqtt_connect()//连接
{
MQTTAsync_SSLOptions ssl_opts = MQTTAsync_SSLOptions_initializer;
pthread_mutex_init(&serial_mute, NULL); //互斥锁
MQTTAsync_create(&client, mqtt_addr, client_id, MQTTCLIENT_PERSISTENCE_NONE, NULL);
MQTTAsync_setCallbacks( //设置回调
client,
NULL,
connlost,
msgarrvd,
NULL);
conn_opts.keepAliveInterval = 20;
conn_opts.cleansession = 1;
conn_opts.onSuccess = onConnect;
conn_opts.onFailure = onConnectFailure;
conn_opts.username = username;
conn_opts.password = password;
conn_opts.context = client;
ssl_opts.struct_version = 5;
ssl_opts.sslVersion = MQTT_SSL_VERSION_TLS_1_2;
ssl_opts.verify = true;
ssl_opts.keyStore = CLIENT_KEY;
ssl_opts.trustStore = CLIENT_CRT;
ssl_opts.enableServerCertAuth = true;
ssl_opts.CApath = CA;
conn_opts.ssl = &ssl_opts;
// ssl_opts.enabledCipherSuites = "TLSv1";
int rc;
if ((rc = MQTTAsync_connect(client, &conn_opts))!= MQTTASYNC_SUCCESS)
{
printf("[CS55]MQTTAsync_connect return %d\n",rc);
finished = 1;
}
// connect_server(); //开始请求连接服务器
while (subscribe_fail != 1) //while(订阅成功)
{
delay(1000); //延迟1000ms
}
MQTTAsync_disconnectOptions disc_opts = MQTTAsync_disconnectOptions_initializer;
disc_opts.onSuccess = onDisconnect;
rc = MQTTAsync_disconnect(client, &disc_opts);
if (rc != MQTTASYNC_SUCCESS)
{
//printf("Failed to start disconnect, return code %d\n", rc);
}
MQTTAsync_destroy(&client);
}
日志:
[CS55]Connect failed, rc -1
[CS55]Connect failed, rc -1
[CS55]Connect failed, rc -1
[CS55]Connect failed, rc -1
我启动程序后会执行回调函数onConnectFailure,然后一直打印连接失败的日志。调试了半天,也不知道问题出在哪里。我可能需要帮助。
我尝试在mqtt中添加证书认证,但是无法连接到服务器。我没有找到参考用例。如果有,请分享给我
connopts.ssl = &ssl_opts;
connopts.ssl->trustStore = CA;
connopts.ssl->privateKey = CLIENT_KEY;
connopts.ssl->keyStore = CLIENT_CRT;
connopts.ssl->enableServerCertAuth = ture;
connopts.ssl->verify = true;
参考上述代码,连接服务器时注意使用SSL协议 ssl://11.22.33.44 :8883。
#define CA "/mnt/key/ca.crt"
#define CLIENT_KEY "/mnt/key/client.key"
#define CLIENT_CRT "/mnt/key/client.crt"
void onConnectFailure(void *context, MQTTAsync_failureData *response)
{
finished = 1;
printf("[CS55]Connect failed, rc %d\n", response ? response->code : 0);
delay(1000);
connect_server();
}
void connect_server()
{
if (MQTTAsync_connect(client, &conn_opts) != MQTTASYNC_SUCCESS)
{
printf("[CS55]connect_server()\n");
finished = 1;
}
}
void mqtt_connect()//连接
{
MQTTAsync_SSLOptions ssl_opts = MQTTAsync_SSLOptions_initializer;
pthread_mutex_init(&serial_mute, NULL); //互斥锁
MQTTAsync_create(&client, mqtt_addr, client_id, MQTTCLIENT_PERSISTENCE_NONE, NULL);
MQTTAsync_setCallbacks( //设置回调
client,
NULL,
connlost,
msgarrvd,
NULL);
conn_opts.keepAliveInterval = 20;
conn_opts.cleansession = 1;
conn_opts.onSuccess = onConnect;
conn_opts.onFailure = onConnectFailure;
conn_opts.username = username;
conn_opts.password = password;
conn_opts.context = client;
ssl_opts.struct_version = 5;
ssl_opts.sslVersion = MQTT_SSL_VERSION_TLS_1_2;
ssl_opts.verify = true;
ssl_opts.keyStore = CLIENT_KEY;
ssl_opts.trustStore = CLIENT_CRT;
ssl_opts.enableServerCertAuth = true;
ssl_opts.CApath = CA;
conn_opts.ssl = &ssl_opts;
// ssl_opts.enabledCipherSuites = "TLSv1";
int rc;
if ((rc = MQTTAsync_connect(client, &conn_opts))!= MQTTASYNC_SUCCESS)
{
printf("[CS55]MQTTAsync_connect return %d\n",rc);
finished = 1;
}
// connect_server(); //开始请求连接服务器
while (subscribe_fail != 1) //while(订阅成功)
{
delay(1000); //延迟1000ms
}
MQTTAsync_disconnectOptions disc_opts = MQTTAsync_disconnectOptions_initializer;
disc_opts.onSuccess = onDisconnect;
rc = MQTTAsync_disconnect(client, &disc_opts);
if (rc != MQTTASYNC_SUCCESS)
{
//printf("Failed to start disconnect, return code %d\n", rc);
}
MQTTAsync_destroy(&client);
}
日志:
[CS55]Connect failed, rc -1
[CS55]Connect failed, rc -1
[CS55]Connect failed, rc -1
[CS55]Connect failed, rc -1
我启动程序后会执行回调函数onConnectFailure,然后一直打印连接失败的日志。调试了半天,也不知道问题出在哪里。我可能需要帮助。
我尝试在mqtt中添加证书认证,但是无法连接到服务器。我没有找到参考用例。如果有,请分享给我
connopts.ssl = &ssl_opts;
connopts.ssl->trustStore = CA;
connopts.ssl->privateKey = CLIENT_KEY;
connopts.ssl->keyStore = CLIENT_CRT;
connopts.ssl->enableServerCertAuth = ture;
connopts.ssl->verify = true;
参考上述代码,连接服务器时注意使用SSL协议 ssl://11.22.33.44 :8883。