我想弄清楚如何在调试期间判断我的 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/