java - 无法从应用程序 ping 主机,但可以

标签 java android

这是我的代码:

InetAddress address =
  InetAddress.getByName("www.whyoceans.com");
if (!address.isReachable(3000)) {
  Toast.makeText(this,
    "Unable to ping host",
    Toast.LENGTH_SHORT).show();
}

isReachable 总是失败,但我可以打开一个 shell 并 ping 它 很好(从我的电脑和我的手机):

ping www.whyoceans.com
PING www.whyoceans.com (69.163.249.123) 56(84) bytes of data.
64 bytes from apache2-fritz.harmony.dreamhost.com (69.163.249.123):
icmp_seq=1 ttl=55 time=38.3 ms
64 bytes from apache2-fritz.harmony.dreamhost.com (69.163.249.123):
icmp_seq=2 ttl=55 time=40.9 ms
^C
--- www.whyoceans.com ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1002ms
rtt min/avg/max/mdev = 38.319/39.654/40.989/1.335 ms

为什么?

最佳答案

我没有在这里测试答案,但它似乎是明智的。

参见:Android Debugging InetAddress.isReachable

seems that isReachable() never worked well on Android b/c it tries to use ICMP, that usually needs a root privileges, and then it tries to establish connection to port 7, that's usually have no running services on modern systems.

you'd better check connectivity with establishing TCP connection to ports you know should be open.

关于java - 无法从应用程序 ping 主机,但可以,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3180750/

相关文章:

Android - 更改实时应用程序的包名称

java - 在没有任何 C/C++ 或 make 知识的情况下使用 FFmpeg for android

java - Hibernate OneToMany 列表中的重复结果

android - 如何对SD卡中的音频文件进行重命名/删除操作

android - 错误 :Could not find com. android.tools.build :gradle:2. 1.0-alpha1

java - 如何在运行时设置端口和连接工厂以进行 Spring TCP 集成

android - 以编程方式在另一个布局中添加布局

java - 如何动态填充注释

java - 如何在 Java 中加载和使用 C DLL 中的结构和函数?

java - Android JSON API 调用