我的程序运行完美一段时间,但之后我收到错误
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服务器上运行程序,想知道如何防止代码停止。我希望它等待连接。
答案 0 :(得分:0)
您的服务器似乎无法确定服务器的IP地址。弹出此错误时,您是否可以检查DNS是否正常工作?只需打开命令提示符窗口并尝试ping该服务器www.sears.com
答案 1 :(得分:0)
当您尝试使用其主机名连接到远程主机时会出现,但无法解析该主机的IP地址。
表单文档:
抛出以指示主机的IP地址不能 确定。
如何解决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,则可以使用host命令。如果这不能按预期工作,则应检查您拥有的主机名是否正确,然后尝试刷新DNS缓存。如果这也不起作用,请尝试使用其他DNS服务器,例如 Google Public DNS是一个非常好的选择。
<强>参考:强>
答案 2 :(得分:0)
其他答案解决了您所看到的特殊例外情况。但是,你(可能)真的在问这个怎么办。
正如您所遇到的,在现实世界中,事情有时会失败(并抛出异常)。在预期异常是临时的情况下,您应该捕获异常并安排重试该操作。您可能希望立即重试,但更常见的是在再次尝试之前稍等一下。这个想法是让任何问题发生,然后再次尝试修复(或自行修复)。
记录异常(或至少是摘要)通常是一个好主意,以防操作员干预可能需要再次进行操作。
如果在该操作成功之前无法继续,则可能需要在循环中重试。如果你可以处理其他事情,可以通过将问题项放在工作队列的后面来实现重试。
对于前一种情况:
doWork("www.sears.com");
变为
while (true) {
try {
doWork("www.sears.com");
break;
} catch (UnknownHostException e) {
logger.log(e.getMessage());
Thread.sleep(10000);
}
}