如何制作一个Android应用程序,从我的Android设备连接在同一个wifi上的电脑的IP地址

问题描述 投票:3回答:2

我想制作一个Android应用程序来查找在同一个wifi上连接的所有连接设备的IP地址。我试过这个:

for (int i = lower; i <= upper; i++) {
    String host = subnet + i;

    try {
        InetAddress inetAddress = InetAddress.getByName(host);
        if (inetAddress.isReachable(timeout)){
            publishProgress(inetAddress.toString());
        }

    } catch (UnknownHostException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

但它只能获得连接的手机的IP,而不是个人电脑。如何获得连接的PC的IP地址?

android network-programming ip-address android-networking wifimanager
2个回答
0
投票

试试这个

public ArrayList<String> getClientList() {
    ArrayList<String> clientList = new ArrayList<>();
    BufferedReader br = null;
    try {
        br = new BufferedReader(new FileReader("/proc/net/arp"));
        String line;
        while ((line = br.readLine()) != null) {
            String[] clientInfo = line.split(" +");
            String mac = clientInfo[3];
            if (mac.matches("..:..:..:..:..:..")) { // To make sure its not the title
                clientList.add(clientInfo[0]);
            }
        }
    } catch (java.io.IOException aE) {
        aE.printStackTrace();
        return null;
    }
    return clientList;
}

并像这样使用它

ArrayList<String> list = getClientList();
        for (String ip:list) {
            Log.e(TAG,ip);
        }

结果:

192.168.1.9 192.168.1.1 192.168.1.5

还检查这个question


0
投票

许多网络完全禁止这种做法,这种做法被称为“无线隔离”或“客户端隔离”,它可以节省电池,提高吞吐量,如果网络是公共的,可以提高隐私,代价是一个客户端难以找到其他主机相同的WLAN。

对于其余的,ping通子网中的所有地址通常是最好的方法,即使有点慢。如果字符串subnet以点结尾,则代码看起来没问题。

当然,所有这些在IPv6上毫无意义。

© www.soinside.com 2019 - 2024. All rights reserved.