【问题标题】:Problems connecting to Google IoT core via MQTT in C通过 C 中的 MQTT 连接到 Google IoT 核心的问题
【发布时间】:2018-07-02 09:28:08
【问题描述】:

我已经从这里设置了示例程序:https://github.com/GoogleCloudPlatform/cpp-docs-samples/tree/master/iot/mqtt-ciotc

当我尝试运行示例时,我得到的唯一错误消息是: '连接失败,返回码1'

然后我继续尝试 NodeJs 版本https://github.com/GoogleCloudPlatform/nodejs-docs-samples/tree/master/iot/mqtt_example

使用相同的roots.pem、私钥和公钥,NodeJs 示例完美运行。我可以在 Google 控制台上查看收到的消息。

是否有任何工具可以帮助我调试 C 示例的问题?或者对可能出现的问题有什么建议?

谢谢, 一个

【问题讨论】:

  • 您是否更改了 C 中的示例代码:.clientid = "projects/{your-project-id}/locations/{your-region-id}/registries/{your-registry-id}/devices/{your-device-id}", 和其他您必须输入具体信息的选项?
  • 是的,我已经设置了所有这些。 C 代码上的 clientid 与 Java 端的完全匹配。
  • 我刚刚在某处读到,默认情况下,MQTT 协议可以默认为 Google 不支持的 3.1,所以我在 C 代码中设置了这个:conn_opts.MQTTVersion = MQTTVERSION_3_1_1 现在我得到返回码 4,即“连接被拒绝 - 用户名或密码错误”
  • 也许可以尝试打印 JWT 并在 jwt.io 上进行测试

标签: c google-cloud-platform mqtt google-cloud-iot


【解决方案1】:

发生这种情况的原因有很多,包括不受支持的版本。 Documentation for Cloud IoT 提供了一些您应该首先验证的步骤,但是由于您是从 NodeJS 代码连接的,因此我们可以放弃一些建议。检查错误的方法是使用 gcloud:

gcloud iot devices describe DEVICE_ID --project=PROJECT_ID --region=REGION --registry=REGISTRY_ID

devices describe 命令可能会显示可用于帮助调试的其他错误消息,包括验证您设备的凭据是否未过期。虽然有些错误可能不会出现,但我的印象是会出现错误的用户名或密码错误。

【讨论】: