Java 如何使用笔记本电脑mac扫描网络并在路由器中找到笔记本电脑ip地址?

Java 如何使用笔记本电脑mac扫描网络并在路由器中找到笔记本电脑ip地址?,java,android-studio,Java,Android Studio,我的笔记本电脑连接到电脑室的路由器。 现在,每次我关闭笔记本电脑并再次连接时,我都会得到一个新的ip地址。 在我的android设备中,我想使用笔记本电脑的ip地址,但每次使用我的电脑时,我都需要登录路由器设置并找到笔记本电脑的ip地址 我想做的是扫描网络中的所有ip,所有连接到路由器网络的ip,然后找到适合笔记本电脑mac地址的ip地址,这样我就知道这是我的笔记本电脑ip地址 我有这两种方法,但我不确定如何使用第一种方法——refreshArp: private static void ref

我的笔记本电脑连接到电脑室的路由器。 现在,每次我关闭笔记本电脑并再次连接时,我都会得到一个新的ip地址。 在我的android设备中,我想使用笔记本电脑的ip地址,但每次使用我的电脑时,我都需要登录路由器设置并找到笔记本电脑的ip地址

我想做的是扫描网络中的所有ip,所有连接到路由器网络的ip,然后找到适合笔记本电脑mac地址的ip地址,这样我就知道这是我的笔记本电脑ip地址

我有这两种方法,但我不确定如何使用第一种方法——refreshArp:

private static void refereshArp(Context ctx){
    //IP aquisition from http://stackoverflow.com/a/6071963/1896516
    WifiManager wm = (WifiManager) ctx.getSystemService(WIFI_SERVICE);
    String ip = Formatter.formatIpAddress(wm.getConnectionInfo().getIpAddress());
    String[] parts = ip.split(".");
    String subnet = parts[0] + "." + parts[1] + "." + parts[2] + ".";
    Runtime rt = Runtime.getRuntime();
    for(int i=0; i<256; i++){
        try{
            rt.exec("ping -c1 " + subnet + i)
        }catch(IOException e){
            continue;
        }
    }

}
另一个问题是从何处调用这两个方法?从Main活动中的onCreate开始


我正在使用android studio 1.3.2作为我的java代码,这不是一个很好的方法,但是您可以(潜在地)配置dhcp服务器,为您的笔记本电脑提供相同的IP地址(通过MAC地址)。另一种选择可能是在启动时将计算机的IP写入数据库,然后从android查询数据库。这不是一种很好的方法,但您可以(潜在地)配置dhcp服务器,以便为笔记本电脑提供相同的IP地址(通过MAC地址)。另一种选择可能是在启动时将机器的IP写入数据库,然后从android查询数据库。
//Adapted from http://www.flattermann.net/2011/02/android-howto-find-the-hardware-mac-address-of-a-remote-host/
private static String getIpFromMac(String mac) {
    if (mac == null)
        return null;
    BufferedReader br = null;
    try {
        br = new BufferedReader(new FileReader("/proc/net/arp"));
        String line;
        while ((line = br.readLine()) != null) {
            String[] splitted = line.split(" +");
            if (splitted != null && splitted.length >= 4 && mac.equals(splitted[3])) {
                // return the ip of the device
                return splitted[0];
            }
        }
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        try {
            br.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    return null;
}