IoT Java Device SDK无法在Linux上解析客户端端点

时间:2017-09-26 05:01:17

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

我已经浏览了AWS控制台中的物联网教程,用于设置Linux / Java设备,该设备会下载一个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)无法解析主机名。

我做错了什么?

1 个答案:

答案 0 :(得分:0)

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

AWS中的物联网端点支持IPv6和IPv4,并且开箱即用,Java将更喜欢IPv6。来自docs

  

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

似乎我的Ubuntu网络配置中的某些东西可能没有设置为IPv6正常工作。如果有人能说明原因,那就太棒了。

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