java - Android 调试 InetAddress.isReachable

标签 java android

我想弄清楚如何在调试期间判断我的 Android 应用程序中是否有特定的 IP 地址(我还没有在实际设备上尝试过)。

根据阅读,InetAddress.isReachable 似乎应该为我做这件事。

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

InetAddress 地址 = InetAddress.getByAddress( new byte[] { (byte) 192, (byte) 168, (byte) 254, (byte) 10 ); success = address.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 比较陌生,所以我怀疑我遗漏了一些东西,但我找不到任何可以表明那是什么的东西。

最佳答案

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

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

关于java - Android 调试 InetAddress.isReachable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2935325/

相关文章:

java - Android - 视频文件加密/解密会影响其质量吗?

java - Kotlin:如何获取文件(IMAGE)的创建日期?

android - ListPreference 字体大小

Java:覆盖子类中的抽象方法

java - J2EE struts应用程序中插入内存漏洞的最佳方法(无需付费:( )

java - 如何在java中仅获取特定的返回类型和方法名称而没有完全限定的返回类型和方法名称

java - Google Play 游戏无法再次登录

android - 如何从android中的特定日期获取通话记录

java - Android 为跨文本添加填充

java - 我可以在Java中编译两个相互依赖的类吗?