【问题标题】:Android Debugging InetAddress.isReachableAndroid 调试 InetAddress.isReachable
【发布时间】:2010-05-29 13:59:38
【问题描述】:

我试图弄清楚在调试期间如何判断我的 android 应用程序中是否有特定的 ipaddress (我没有在实际设备上尝试过)。

从阅读看来,InetAddress.isReachable 应该为我执行此操作。

最初我认为我可以编写如下代码:

InetAddress 地址 = InetAddress.getByAddress(new byte[] { (byte) 192, (byte) 168, (byte) 254, (byte) 10 ); 成功 = 地址.isReachable(3000);

即使我有理由确定它是一个可到达的地址,它也会返回 false。

我发现如果我把它改成 127, 0, 0, 1 就会返回成功。

我的下一次尝试是相同的代码,但我使用了从 www.google.com ping 获得的地址(撰写本文时为 72.167.164.64)。没有成功。

然后我又试了一个例子:

int timeout = 2000;
InetAddress[] addresses = InetAddress.getAllByName("www.google.com");
for (InetAddress address : addresses)
{
    if ( address.isReachable(timeout))
    {
       success = true; // just set a break point here
    }
}

我对 Java 和 Android 比较陌生,所以我怀疑我遗漏了一些东西,但我找不到任何可以表明那是什么的东西。

【问题讨论】:

    标签: java android


    【解决方案1】:

    似乎 isReachable() 在尝试使用 ICMP 的 Android b/c 上运行良好,这通常需要 root 权限,然后它尝试建立与端口 7 的连接,这通常在现代系统上没有正在运行的服务。

    您最好通过建立与您知道应该打开的端口的 TCP 连接来检查连接性。

    【讨论】:

    • '它试图建立到端口 7 的连接,这通常在现代系统上没有正在运行的服务' ...是的,但这并不重要,因为它将'连接拒绝'到端口 7 解释为成功, 表示主机在那里并且 TCP 已启动。
    • 许多系统不会发送“连接被拒绝”或“端口不可达”消息
    • 在搞砸了几个小时后,我意识到它不起作用。真是一团糟。感谢您的回答... +1
    • @MarquisofLorne 你确定它试图访问端口 7 吗?这就是回声服务。这方面的文档很糟糕。这是否意味着如果它不尝试使用 ping/ICMP,那么需要 root 设备是虚假的?
    【解决方案2】:

    感谢 Zed,我也知道我要获取的地址会返回 html,所以我可以做的不仅仅是查看套接字。这是我最终做的对我的问题有效的方法。参数 pUrl 中包含网站的地址。我选择了 3 秒作为超时时间。

    boolean result = false;
    try
    {
        HttpGet request = new HttpGet(pUrl.toString());
    
        HttpParams httpParameters = new BasicHttpParams();  
    
        HttpConnectionParams.setConnectionTimeout(httpParameters, 3000);
        HttpClient httpClient = new DefaultHttpClient(httpParameters);
        HttpResponse response = httpClient.execute(request);
    
        int status = response.getStatusLine().getStatusCode();
    
        if (status == HttpStatus.SC_OK) 
        {
            result = true;
        }
    
    }
    catch (SocketTimeoutException e)
    {
        result = false; // this is somewhat expected
    }
    

    【讨论】:

      猜你喜欢
      • 2022-01-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-10
      • 2013-05-11
      • 2011-02-19
      • 1970-01-01
      相关资源
      最近更新 更多