建立像网络扫描到我们的Android应用程序的Fing。它现在可以工作,但需要花费很长时间才能完成

时间:2017-01-24 08:50:26

标签: java android networking

我们想要构建一个功能,如果用户连接到WiFi网络,我们可以显示连接到同一WiFi的其他设备的详细信息。我们该怎么做呢?

现在,我们可以通过以下方式实现目标:

  1. ping当前网络上的所有IP地址(从1-255开始循环) - 这是最耗时的步骤(下面的代码片段)
  2. 获取响应的IP地址,获取其MAC地址,最后
  3. 使用外部API获取MAC地址的制造商
  4. 我们在这方面取得了成功,但问题是它需要太长时间 - 大约需要4-5分钟才能完成。我有一种感觉,有人可以指出我们更好,更快的解决方案。

    有一个类似question(虽然它是关于iOS)但没有找到任何答案,因此再次发布。如果这违反了规则,请原谅。任何帮助都将受到高度赞赏。

    以下是代码片段,这些代码需要很长时间才能返回结果(步骤1)

    for (int i = 0; i < 255; i++) {
    String host = "";
    try {
    String subnet = "192.168.2";
    host = subnet + "." + i;
    
    Process exec = Runtime.getRuntime().exec(String.format(CMD, host));
    int i1 = exec.waitFor();
    if (i1 == 0) {
    InetAddress a = InetAddress.getByName(host);
    Log.i("TAG", "run: " + a.getHostAddress());
    } else {
    throw new IOException("Unable to get ping from runtime");
    }
    } catch (IOException | InterruptedException e) {
    try {
    InetAddress a = InetAddress.getByName(host);
    if (a.isReachable(200)) {
    Log.i("TAG", "run: " + a.getHostAddress());
    }
    } catch (IOException ioe) {
    ioe.printStackTrace();
    }
    
    } catch (Exception e) {
    e.printStackTrace();
    }
    

0 个答案:

没有答案