c# - 发布命令后的 SocketException,ApplicationClient
问题描述
我在 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 上接收这些事件,我只有命令有问题。
编辑:添加说明 - 我不知道使用哪个端口 exaclty,它是管理连接的 IBMWIoTP,但文档说要打开 1883、80、8883 和 443。我在 Windows 防火墙和我的路由器中都这样做了.
发布方法是这样的:
appClient.publishCommand("覆盆子", "Pi2B", "pi", "txt", 数据, 0); 其中 Raspberry 是设备类型;Pi2B 设备 id,pi 主题,txt 格式,data 是字符串,0 是 QoS。
我正在使用 IBM 推荐的 Nuget 库:IBMWIoTP
- 我尝试在安全性中设置 TLS 选项,但这并不能解决问题
- 我在 IBMWIoTP 库源代码中的 connect 方法上找到了未捕获异常的确切时刻:
connevtionState = mqttClient.Connect(clientId, clientUsername, clientPassword,cleanSession,keepAlivePeriod);
解决方案
断开的连接可能表明您正在尝试做一些非法的事情,例如发布到您不允许的主题。
推荐阅读
- codeigniter - 日期比较不适用于我的 codeigniter 模型类
- jquery - 如何在 Angular 6 中使用 jquery 更新 ngModel?
- git - Azure DevOps 构建过程 创建 Git 分支
- powershell - SVN使用powershell在SVN中最后一次写入文件的时间
- hadoop - 在 Hive 中需要有关日期功能的帮助
- python - Pycharm 无法导入包并在我的 vmware 机器 windows 7 中显示 SSL 错误
- python - 防止在 pandas 方法链接期间过早评估操作
- extjs - mainView 上 renderTo EXTJS 的方法
- php - 从星期几、年份和星期数获取日期
- javascript - GatsbyJS + Netlify 表单没有收到提交