在 connect() 调用中看不到我的服务器名称的 arduino 变量

问题描述

我在 esp8266 上运行了这个,但我怀疑这是一个 c/c++ 问题,很可能是因为我不了解一些基本的东西。

我正在尝试连接到由从 json 配置文件读取的值设置的 mqtt 服务器。 connect() 调用的调试没有看到我分配给变量的值。连接调用失败,因为要连接的服务器名称为空,但仅在 connect() 调用内部。

进行此类通话的正确方法是什么?

代码片段:

Adafruit_MQTT_Client *mqtt;
const char* _MqttServer = NULL;


setup {
// ...
// read file,parse json,gets the correct value
_MqttServer = jObject["mqttserver"];

// port/username/key are setup as #define earlier
mqtt = new Adafruit_MQTT_Client(&client,_MqttServer,MQTT_SERVERPORT,MQTT_USERNAME,MQTT_KEY);

while ((ret = mqtt->connect()) != 0) { // connect will return 0 for connected
  Serial.println(mqtt->connectErrorString(ret));
  Serial.println(_MqttServer); // prints correct value
  mqtt->disconnect();
  delay(5000);  // wait 5 seconds
}
// ...
}

打印的错误来自

bool Adafruit_MQTT_Client::connectServer() {
  // Grab server name from flash and copy to buffer for name resolution.
  memset(buffer,sizeof(buffer));
  strcpy((char *)buffer,servername);
  Serial.print(F("Connecting to: ")); Serial.print((char *)buffer);

我得到的错误

Connection Failed!
Connecting to:
Connect result: 0
retrying MQTT connection in 5 seconds...

如果我将 _MqttServer 更改为 #define 并将其从对 json 的分配中删除,则它会正常连接。与此同时,我已经这样做了,以使设备正常工作。我看到的问题是被调用函数看不到的变量的传递或赋值。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...