MQTT库使用中发现的一个奇怪的问题。关于字符串的声明。-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 4117|回复: 1

MQTT库使用中发现的一个奇怪的问题。关于字符串的声明。

[复制链接]
回帖奖励 1 金币 回复本帖可获得 1 金币奖励! 每人限 1 次(中奖概率 10%)
发表于 2018-5-17 15:31 | 显示全部楼层 |阅读模式
本帖最后由 12jnl 于 2018-5-17 15:36 编辑

开发平台:ESP8266。
使用的MQTT库:https://github.com/knolleary/pubsubclient。

MQTT库中有这样一个函数:   
PubSubClient& setServer(const char * domain, uint16_t port);
用于设置MQTT服务器的域名和端口号。
使用前先声明下客户端
WiFiClient espClient;     //声明WIFI客户端
PubSubClient MQclient(espClient);    //声明MQTT客户端


然后调用过程中,有如下现象:

如果使用这种方式声明域名:const char* test_host = "broker.mqtt-dashboard.com";
然后调用:
MQclient.setServer( test_host , 1883 );   //设置MQTT服务器
MQclient.connect( );    //连接MQTT
即可成功连接MQTT服务器;

如果使用这种方式声明域名:const char test_host[] = "broker.mqtt-dashboard.com";
然后调用:
MQclient.setServer( test_host , 1883 );    //设置MQTT服务器
MQclient.connect( );    //连接MQTT
连接MQTT服务器会失败。



因为最终我计划将MQTT服务器地址存在EEPROM里,作为一个可修改的参数,所以最终不能用上面第一种声明方式。
最终需要使用类似下面的方法从EEPROM读取出来再进行设置。
char mqtt_host[32]={0};
DATA_EEPROM_ReadBuffer(  0x10  , (uint8_t*) mqtt_host , 32  );
MQclient.setServer( mqtt_host , 1883 );    //设置MQTT服务器
MQclient.connect( );    //连接MQTT



我考虑 const char *test_host是指针const char test_host[ ] 是数组;
可能是这个原因导致,但是已经试过下面方法:
const char test_host0[] =  "broker.mqtt-dashboard.com";
const char *test_host1 = test_host0;
MQclient.setServer( test_host1 , 1883 );  
   //设置MQTT服务器
依然连接失败。

所以到底这是为什么?
发表于 2018-5-18 09:35 | 显示全部楼层
初来乍到,帮顶一下
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-11-28 16:34 , Processed in 0.072444 second(s), 16 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表