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

12jnl 发表于 2018-5-17 15:31

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

本帖最后由 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={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服务器
依然连接失败。

所以到底这是为什么?

yzwguet 发表于 2018-5-18 09:35

初来乍到,帮顶一下:)
页: [1]
查看完整版本: MQTT库使用中发现的一个奇怪的问题。关于字符串的声明。