【发布时间】:2016-05-31 14:11:00
【问题描述】:
我正在开发一个 Android 应用程序,我必须发现 WiFi 网络中的每个主机,我已经实现了一个功能,可以“ping”某个网络的 1 到 255 之间的所有 IP 地址。
这个解决方案效果很好,但是有一个问题,执行时间。每次我启动我的应用程序时,我等待大约 256 秒,太长了,我等不及了。
这是我的源代码(我在 Stack 上找到了这个代码,我修改了代码以在我的条件下工作):
public class ScanNetwork {
ArrayList < String > hosts;
int i;
boolean finish = false;
public ArrayList < String > ScanNetwork(String ipAddress) {
hosts = new ArrayList < String > ();
final String subnet = ipAddress.substring(0, ipAddress.lastIndexOf("."));
for (i = 0; i < 256; i++) {
String currentHost = subnet + "." + i;
Process p1 = null;
int returnVal = 0;
try {
p1 = Runtime.getRuntime().exec("ping -w 50 -c 1 " + currentHost);
returnVal = p1.waitFor();
} catch (IOException e) {
System.out.println("Log: " + e.toString());
} catch (InterruptedException e) {
System.out.println("Log: " + e.toString());
}
boolean reachable = (returnVal == 0);
if (reachable) {
if (!hosts.contains(currentHost)) {
hosts.add(currentHost);
System.out.println(currentHost);
}
}
}
return hosts;
}
}
本源代码完美但执行时间过长,有其他方法获取网络中的所有主机吗?
我该如何解决这个问题?
【问题讨论】:
-
参考这个 [链接] (stackoverflow.com/questions/36277912/how-to-scan-ip-in-android/…)。它可能对你有帮助。只需将超时时间从 5 增加到 20。它将为您提供本地网络中的所有
IP。
标签: java android networking