【问题标题】:SocketException after publishCommand, ApplicationClient发布命令后的 SocketException,ApplicationClient
【发布时间】:2019-03-31 16:37:42
【问题描述】:

我在 IBM Watson IoT Platform 中创建了一个应用程序,并使用提供的代码示例连接了一个 ApplicationCLient 对象。

连接很好,但是当发送发布命令时,一两秒后我在 VS2017 的输出窗口中得到了这个:

Exception levée : 'System.Net.Sockets.SocketException' dans System.dll
Exception levée : 'System.IO.IOException' dans System.dll
Exception levée : 'System.IO.IOException' dans System.dll
Le thread 0x4a4 s'est arrêté avec le code 0 (0x0).
Exception levée : 'System.Security.Cryptography.CryptographicException' 
dans mscorlib.dll

问题是,我在任何地方都使用了 try/catch 块,但它们没有捕捉到这些异常。

我猜是关于端口转发,但即使打开 watson iot 所需的端口后,我似乎也无法让命令工作

我可以成功地从设备发布事件并在 ApplicationClient 上接收这些事件,我只有 Command 有问题。

编辑:添加说明 - 我不知道使用了哪个端口,它是管理连接的 IBMWIoTP,但文档说要打开 1883、80、8883 和 443。 我在 Windows 防火墙和路由器中都这样做了。

  • 发布方法是这样的:

    appClient.publishCommand("Raspberry", "Pi2B", "pi", "txt", data, 0); 其中 Raspberry 是设备类型; Pi2B为设备id,pi为主题,txt为格式,data为字符串,0为QoS。

  • 我正在使用 IBM 推荐的 Nuget 库:IBMWIoTP

  • 我尝试在安全中设置 TLS 选项,但这并不能解决问题
  • 我在 IBMWIoTP 库源代码中的 connect 方法上找到了未捕获异常的确切时刻:

connevtionState = mqttClient.Connect(clientId, clientUsername, clientPassword,cleanSession,keepAlivePeriod);

【问题讨论】:

  • 你通过什么端口连接?它看起来像安全连接,所以我猜它超过了 8883。你在使用什么库?发布方法长什么样子?
  • 我编辑了我原来的问题来回答。

标签: c# ibm-cloud watson-iot


【解决方案1】:

断开的连接可能表明您正在尝试做一些非法的事情,例如发布到您不被允许的主题。

【讨论】:

    【解决方案2】:

    好吧,我找到了原因……我很惭愧。 我影响了应用程序上的错误配置文件,我无法使用此配置文件发送命令。 我已经设置了一个标准的应用程序配置文件,现在一切正常。 我在这上面浪费了太多时间......

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多