2017-09-26 138 views
1

我已閱讀了AWS控制檯中的IoT教程,用於設置下載zip文件的Linux/Java設備,並最終使用此處的代碼:https://github.com/aws/aws-iot-device-sdk-java。當我從zip運行start.sh腳本時,我看到一個UnknownHostException,並且腳本失敗。IoT Java Device SDK無法解析Linux上的客戶端端點

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 

什麼也奇怪的是,查驗客戶終端的作品,但telnet等其他工具無法解析主機名。

我在做什麼錯?

+0

這可能是Linux上的IPv6問題嗎?我已經在OSX上嘗試過相同的教程,它工作正常。 – noelob

回答

0

我想出瞭如何解決這個問題:設置-Djava.net.preferIPv4Stack=true

AWS中的物聯網終端支持IPv6和IPv4,並且開箱即用,Java將更喜歡IPv6。從docs

Java的網絡協議棧首先檢查的IPv6是否支持 底層的操作系統。如果支持IPv6,則會嘗試使用IPv6堆棧。更具體地說,在雙棧系統上,它會創建一個IPv6套接字。

似乎可能是在我的Ubuntu網絡配置配置不正確的IPv6工作正常。如果任何人都可以闡明爲什麼,那就太棒了。

我的問題可能與this one有關。