未知主机异常 java
UnknownHostException java
我的程序在一段时间内运行完美,但之后出现错误
java.net.UnknownHostException: www.sears.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.net.NetworkClient.doConnect(NetworkClient.java:175)
at sun.net.www.http.HttpClient.openServer(HttpClient.java:432)
at sun.net.www.http.HttpClient.openServer(HttpClient.java:527)
at sun.net.www.http.HttpClient.parseHTTP(HttpClient.java:666)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1534)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1439)
at extractData.ReviewsSearch.getJsonResponse(ReviewsSearch.java:28)
at main.java.DepartmentCategories_Main.main(DepartmentCategories_Main.java:110)
java.net.UnknownHostException: www.sears.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.net.NetworkClient.doConnect(NetworkClient.java:175)
at sun.net.www.http.HttpClient.openServer(HttpClient.java:432)
at sun.net.www.http.HttpClient.openServer(HttpClient.java:527)
at sun.net.www.http.HttpClient.<init>(HttpClient.java:211)
at sun.net.www.http.HttpClient.New(HttpClient.java:308)
at sun.net.www.http.HttpClient.New(HttpClient.java:326)
at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(HttpURLConnection.java:1167)
at sun.net.www.protocol.http.HttpURLConnection.plainConnect0(HttpURLConnection.java:1103)
at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:997)
at sun.net.www.protocol.http.HttpURLConnection.connect(HttpURLConnection.java:931)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1511)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1439)
at extractData.productHierarchySearch.getHierarchy(productHierarchySearch.java:27)
at main.java.DepartmentCategories_Main.main(DepartmentCategories_Main.java:115)
任何想法,可能是什么原因?如果需要更多信息,请告诉我
编辑:
我尝试了 ping 命令,我意识到这是互联网连接。我是 ssh 服务器中的 运行 程序,想知道如何防止代码停止。我想让它等待连接。
看来你的服务器无法计算出服务器的IP地址。弹出此错误时,您可以检查 DNS 是否正常工作吗?只需打开命令提示符 window 并尝试 ping 该服务器 www.sears.com
当您尝试使用其主机名连接到远程主机,但无法解析该主机的 IP 地址时出现。
表单文档:
Thrown to indicate that the IP address of a host could not be
determined.
如何解决UnknownHostException?
UnknownHostException
表示一个非常简单的问题。您尝试访问的远程主机的 IP 地址无法解析。所以解决这个问题很简单。您应该检查 Socket 的输入(或抛出 UnknownHostException
的任何其他方法),并验证它是否是预期的输入。如果您不确定您的主机名是否正确,您可以启动 UNIX 终端并使用 nslookup 命令(以及其他命令)来查看您的 DNS 服务器是否可以成功地将主机名解析为 IP 地址。这是一个例子:
nikos@nikos:~$ nslookup www.google.com
Server: 127.0.1.1
Address: 127.0.1.1#53
Non-authoritative answer:
Name: www.google.com
Address: 173.194.39.209
Name: www.google.com
Address: 173.194.39.210
Name: www.google.com
Address: 173.194.39.212
Name: www.google.com
Address: 173.194.39.211
Name: www.google.com
Address: 173.194.39.208
nikos@nikos:~$
如果您在 Windows 上,则可以使用主机命令。如果这没有按预期工作,那么您应该检查您拥有的主机名是否正确,然后尝试刷新您的 DNS 缓存。如果这也不起作用,请尝试使用不同的 DNS 服务器,例如 Google Public DNS 是一个很好的选择。
参考:
其他答案解决了您看到的特定异常。但是,您(可能)真的在问该怎么办。
正如您所遇到的,在现实世界中,事情有时会失败(并抛出异常)。在预计异常是暂时的情况下,您应该捕获异常并安排重试该操作。您可能想立即重试,但更多时候最好稍等片刻再重试。这个想法是让发生的任何问题在重试之前得到解决(或自行修复)。
记录异常(或至少是摘要)通常是个好主意,以防可能需要操作员干预才能让事情重新开始。
如果在该操作成功之前无法继续,您可能需要循环重试。如果您可以处理其他事情,则可以通过将问题项目放在工作队列的后面来实现重试。
对于前一种情况:
doWork("www.sears.com");
变成
while (true) {
try {
doWork("www.sears.com");
break;
} catch (UnknownHostException e) {
logger.log(e.getMessage());
Thread.sleep(10000);
}
}
我的程序在一段时间内运行完美,但之后出现错误
java.net.UnknownHostException: www.sears.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.net.NetworkClient.doConnect(NetworkClient.java:175)
at sun.net.www.http.HttpClient.openServer(HttpClient.java:432)
at sun.net.www.http.HttpClient.openServer(HttpClient.java:527)
at sun.net.www.http.HttpClient.parseHTTP(HttpClient.java:666)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1534)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1439)
at extractData.ReviewsSearch.getJsonResponse(ReviewsSearch.java:28)
at main.java.DepartmentCategories_Main.main(DepartmentCategories_Main.java:110)
java.net.UnknownHostException: www.sears.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.net.NetworkClient.doConnect(NetworkClient.java:175)
at sun.net.www.http.HttpClient.openServer(HttpClient.java:432)
at sun.net.www.http.HttpClient.openServer(HttpClient.java:527)
at sun.net.www.http.HttpClient.<init>(HttpClient.java:211)
at sun.net.www.http.HttpClient.New(HttpClient.java:308)
at sun.net.www.http.HttpClient.New(HttpClient.java:326)
at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(HttpURLConnection.java:1167)
at sun.net.www.protocol.http.HttpURLConnection.plainConnect0(HttpURLConnection.java:1103)
at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:997)
at sun.net.www.protocol.http.HttpURLConnection.connect(HttpURLConnection.java:931)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1511)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1439)
at extractData.productHierarchySearch.getHierarchy(productHierarchySearch.java:27)
at main.java.DepartmentCategories_Main.main(DepartmentCategories_Main.java:115)
任何想法,可能是什么原因?如果需要更多信息,请告诉我
编辑: 我尝试了 ping 命令,我意识到这是互联网连接。我是 ssh 服务器中的 运行 程序,想知道如何防止代码停止。我想让它等待连接。
看来你的服务器无法计算出服务器的IP地址。弹出此错误时,您可以检查 DNS 是否正常工作吗?只需打开命令提示符 window 并尝试 ping 该服务器 www.sears.com
当您尝试使用其主机名连接到远程主机,但无法解析该主机的 IP 地址时出现。
表单文档:
Thrown to indicate that the IP address of a host could not be determined.
如何解决UnknownHostException?
UnknownHostException
表示一个非常简单的问题。您尝试访问的远程主机的 IP 地址无法解析。所以解决这个问题很简单。您应该检查 Socket 的输入(或抛出 UnknownHostException
的任何其他方法),并验证它是否是预期的输入。如果您不确定您的主机名是否正确,您可以启动 UNIX 终端并使用 nslookup 命令(以及其他命令)来查看您的 DNS 服务器是否可以成功地将主机名解析为 IP 地址。这是一个例子:
nikos@nikos:~$ nslookup www.google.com
Server: 127.0.1.1
Address: 127.0.1.1#53
Non-authoritative answer:
Name: www.google.com
Address: 173.194.39.209
Name: www.google.com
Address: 173.194.39.210
Name: www.google.com
Address: 173.194.39.212
Name: www.google.com
Address: 173.194.39.211
Name: www.google.com
Address: 173.194.39.208
nikos@nikos:~$
如果您在 Windows 上,则可以使用主机命令。如果这没有按预期工作,那么您应该检查您拥有的主机名是否正确,然后尝试刷新您的 DNS 缓存。如果这也不起作用,请尝试使用不同的 DNS 服务器,例如 Google Public DNS 是一个很好的选择。
参考:
其他答案解决了您看到的特定异常。但是,您(可能)真的在问该怎么办。
正如您所遇到的,在现实世界中,事情有时会失败(并抛出异常)。在预计异常是暂时的情况下,您应该捕获异常并安排重试该操作。您可能想立即重试,但更多时候最好稍等片刻再重试。这个想法是让发生的任何问题在重试之前得到解决(或自行修复)。
记录异常(或至少是摘要)通常是个好主意,以防可能需要操作员干预才能让事情重新开始。
如果在该操作成功之前无法继续,您可能需要循环重试。如果您可以处理其他事情,则可以通过将问题项目放在工作队列的后面来实现重试。
对于前一种情况:
doWork("www.sears.com");
变成
while (true) {
try {
doWork("www.sears.com");
break;
} catch (UnknownHostException e) {
logger.log(e.getMessage());
Thread.sleep(10000);
}
}