我正在使用进程ping我网络上的计算机。 (这是我正在处理的Android应用程序)
public int pingHost(String host) throws IOException, InterruptedException {
String cmd = "/system/bin/ping -c 1 -W 1000 " + host;
proc = Runtime.getRuntime().exec(cmd);
BufferedReader input = new BufferedReader(new InputStreamReader(proc.getErrorStream()));
String line;
while ((line = input.readLine()) != null) {
System.out.println(line);
}
proc.waitFor();
input.close();
return proc.exitValue();
}
调用此方法,并根据进程提供的exitValue确定ping是否成功。我用我的网络上的大多数主机测试了这个pingHost()方法,我得到一个退出值并用适当的消息进行响应。(ping success / ping失败)。但是在我的网络上有一个特定主机,则不会返回exitValue。为什么会这样?
我发现有人遇到类似的问题,但提供给他们的解决方案对我没有帮助。这个过程仍然悬而未决。没有提供错误。有什么建议吗?
我尝试添加一个在调用waitFor()之前启动的线程...线程会休眠3秒然后销毁该进程,但这并没有帮助。我有没有想到的另一个问题?
显然在Java 8中添加了一个允许超时参数的新waitFor()方法...我的IDE设置为使用jdk1.8.0_65,但这种方法对我来说是不可用的。有什么我忘了做的吗?
答案 0 :(得分:0)
要回答“ping”网络中的计算机的问题,您可以使用:
InetAddress.getByName(host).isReachable(timeout)
文档:
尝试达到此
InetAddress
。此方法首先尝试使用ICMP(ICMP ECHO REQUEST),然后回退到远程主机的端口7(Echo)上的TCP连接。
此函数将尝试ping主机,并返回正/负结果。好处是,这将处理大多数Linux / Windows /无论是Android设备的“幕后”。即使你没有访问ping二进制文件,或者你的设备中的其他地方,也没有访问二进制文件的路径。