【问题标题】:IoT Java Device SDK Unable to Resolve Client Endpoint on LinuxIoT Java 设备 SDK 无法解析 Linux 上的客户端端点
【发布时间】:2017-09-26 05:01:16
【问题描述】:

我已经浏览了 AWS 控制台中有关设置 Linux/Java 设备的 IoT 教程,该设备会下载一个 zip 文件,并最终使用此处的代码:https://github.com/aws/aws-iot-device-sdk-java。当我从 zip 运行 start.sh 脚本时,我看到了 UnknownHostException,并且脚本失败了。

Cert file:../java-thing.cert.pem Private key: ../java-thing.private.key
Sep 21, 2017 10:23:11 PM com.amazonaws.services.iot.client.mqtt.AwsIotMqttConnectionListener onFailure
WARNING: Connect request failure
MqttException (0) - java.net.UnknownHostException: a2vnfud9kry2r9.iot.us-east-1.amazonaws.com
        at org.eclipse.paho.client.mqttv3.internal.ExceptionHelper.createMqttException(ExceptionHelper.java:38)
        at org.eclipse.paho.client.mqttv3.internal.ClientComms$ConnectBG.run(ClientComms.java:664)
        at java.lang.Thread.run(Thread.java:748)
Caused by: java.net.UnknownHostException: a2vnfud9kry2r9.iot.us-east-1.amazonaws.com
        at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:184)
        at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
        at java.net.Socket.connect(Socket.java:589)
        at sun.security.ssl.SSLSocketImpl.connect(SSLSocketImpl.java:668)
        at org.eclipse.paho.client.mqttv3.internal.TCPNetworkModule.start(TCPNetworkModule.java:70)
        at org.eclipse.paho.client.mqttv3.internal.SSLNetworkModule.start(SSLNetworkModule.java:86)
        at org.eclipse.paho.client.mqttv3.internal.ClientComms$ConnectBG.run(ClientComms.java:650)
        ... 1 more

按照官方文档中的建议诊断连接没有问题;它连接得很好:

openssl s_client -connect a2vnfud9kry2r9.iot.us-east-1.amazonaws.com:8443 -CAfile root-CA.crt -cert java-thing.cert.pem -key java-thing.private.key

同样奇怪的是,ping 客户端端点有效,但其他工具(如 telnet)无法解析主机名。

我做错了什么?

【问题讨论】:

  • 这可能是 Linux 上 IPv6 的问题吗?我在 OSX 上尝试过相同的教程,效果很好。

标签: java linux amazon-web-services iot aws-iot


【解决方案1】:

我想出了如何解决这个问题:设置-Djava.net.preferIPv4Stack=true

AWS 中的 IoT 终端节点同时支持 IPv6 和 IPv4,而且开箱即用,Java 更喜欢 IPv6。来自docs

Java 网络堆栈首先检查是否支持 IPv6 底层操作系统。如果支持 IPv6,它会尝试使用 IPv6 堆。更具体地说,在双栈系统上,它创建了一个 IPv6 插座。

似乎我的 Ubuntu 网络配置中的某些内容未正确设置为使 IPv6 正常工作。如果有人能解释原因,那就太棒了。

我的问题可能与this one有关。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-12-23
    • 1970-01-01
    • 1970-01-01
    • 2020-07-27
    • 2023-04-08
    • 2015-12-20
    • 2017-12-25
    相关资源
    最近更新 更多