2

我正在尝试使用“isReachable”方法检查是否可以访问某些主机。

line 113: oaiBaseURL = "http://www.cnn.com";//////////////////////////////////////
line 114: boolean res = InetAddress.getByName(oaiBaseURL).isReachable(10000);
line 115: System.out.println("------reachable:"+res);

并获得以下错误消息(在 Eclipse 中):

java.net.UnknownHostException: http://www.cnn.com
    at java.net.Inet6AddressImpl.lookupAllHostAddr(Native Method)
    at java.net.InetAddress$1.lookupAllHostAddr(Unknown Source)
    at java.net.InetAddress.getAddressFromNameService(Unknown Source)
    at java.net.InetAddress.getAllByName0(Unknown Source)
    at java.net.InetAddress.getAllByName(Unknown Source)
    at java.net.InetAddress.getAllByName(Unknown Source)
    at java.net.InetAddress.getByName(Unknown Source)
    at com.irWizard.web.validator.WizardValidator.validateForm(WizardValidator.java:114)

有谁知道这个错误可能是什么原因?

提前致谢!

4

5 回答 5

7

您需要删除http://前缀。

据我所知,该InetAddress.getByName()方法采用主机名而不是 URL。

您可以按如下方式更改代码:

   URL url = new URL("http://www.cnn.com");
   boolean res = InetAddress.getByName(url.getHost()).isReachable(10000);
   System.out.println("------reachable:"+res);

但是请记住该方法isReachable()用于确定其是否可访问的机制。它主要使用 ICMP 技术,许多网站或中间防火墙可能会阻止这些技术。

于 2013-11-04T14:08:54.377 回答
0

我通过创建热点在我的笔记本电脑上尝试了这个并且它有效。有时将子网输入给程序可能会出现问题,那时您可能会遇到这个问题。希望它对你有用。

subnet = subnet.trim();
int timeout = 1500;
for(int i=1;i<254;i++)
    {
    try
      {
        String host = subnet +"."+i;
        if (InetAddress.getByName(host).isReachable(timeout))
          {
            Check = Check+host+"\n";
            System.out.println(host);
          } 

       }
    catch (UnknownHostException ex) { 
        Logger.getLogger(WiFi.class.getName()).log(Level.SEVERE, null, ex);
    } catch (IOException ex) {
        Logger.getLogger(WiFi.class.getName()).log(Level.SEVERE, null, ex);
于 2015-01-25T21:04:42.227 回答
0

从文档中引用:

主机名可以是机器名,例如“java.sun.com”,也可以是其 IP 地址的文本表示。如果提供了文字 IP 地址,则仅检查地址格式的有效性。

您无需指定方案。只需删除“http://”,它应该可以工作。

于 2013-11-04T14:14:36.483 回答
0

您是否按照应有的方式解析了网址?您只需要从 URL 获取主机名

URL oaiBaseURL = new URL("http://www.cnn.com");
boolean res = InetAddress.getByName(oaiBaseURL.getHost()).isReachable(10000);
System.out.println("------reachable:"+res); 
于 2013-11-04T14:17:36.357 回答
0

在我的情况下,在 /etc/hosts 中添加相关主机名和 IP 地址的条目已解决。

于 2018-01-22T10:52:18.423 回答