当前位置: 首页 > 知识库问答 >
问题:

IoT Java设备SDK无法解析Linux上的客户端endpoint

顾超
2023-03-14

我已经在AWS控制台中学习了IoT教程,用于设置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客户端endpoint可以工作,但其他工具(如telnet)无法解析主机名。

我做错了什么?

共有1个答案

施俊远
2023-03-14

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

AWS中的IoTendpoint同时支持IPv6和IPv4,而且Java更喜欢IPv6。从文档中:

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

 类似资料:
  • 我试图通过OnConnect方法中的location客户端请求位置更新。我的片段实现了LocationListener,GooglePlayServicesClient。ConnectionCallbacks和GooglePlayServicesClient。OnConnectionFailedListener。 代码看起来像这样。 错误是“找不到适用于requestLocationUpdates

  • 整个直播的业务架构是: +---------+ +-----------------+ +---------+ | Encoder +-->---+ SRS/CDN Network +--->---+ Player | +---------+ +-----------------+ +---------+ 客户端推流(Encoder)和播放器(

  • KSVC KSVC(Kingsoft Video Cloud)是金山云提供的移动端SDK。金山云在编解码方面动作比较多,支持了h.265。 编码器特性: Android iOS Codec Transport Hardware Encoder Software Encoder Lowlatency YES YES H.264+AAC H.265 RTMP YES YES NO 编码器高级特性: 美

  • iam使用openam与Tomcat7一起使用,下面的行总是产生异常SSOTokenManager manager=SSOTokenManager.getInstance();SSOToken SSOToken=manager.createssotoken(请求); 无效的会话id AMSSOProvider:09/18/2012 01:18:01:882 PM EEST:Thread[http-

  • 我需要编写一个应用程序,它连接到Jira实例的REST API,并将特定数据同步到我们的另一个应用程序。 我觉得这个官方的REST客户库是我最直接的方式。不幸的是,似乎没有现成的罐依赖性,我可以添加到我的POM。我想我会自己建造,然后复制回购协议。为了启用Atlassian专有依赖项的资源化,我在Maven的设置中添加了Maven Repo代理。Atlassian开发者文档中建议的xml。 不幸的

  • 我试图构建一个Android应用程序,作为一个BLE外设,也作为GATT客户端。 以下是我试图实现的步骤: 但是,如何在Android设备上通知我可以建立连接,以便调用函数连接到GATT服务器? 我也通过启动广告后获取远程设备进行了尝试。 我错过了什么?