我正在尝试在Android中构建一个应用程序,该应用程序需要连接到wifi路由器(我的本地路由器)的所有设备(PC和其他移动设备)的IP地址。 IP地址是路由器使用DHCP分配给设备的IP地址。此外,我尝试构建的应用程序将是连接到同一路由器的设备的本地应用程序。我已经在网上查找了可以实现此目的的Android代码,但我发现的只是如何扫描wifi接入点。我正在尝试使用Android编程做什么?
答案 0 :(得分:2)
这没有直接的API。它不像wifi路由器给每个人一个列出它分配的所有IP。您可以尝试ping您的wifi网络上的每个IP(您可以通过网络掩码告诉它们是哪些IP),但这只有在设备配置为返回ICMP数据包并且您的路由器不阻止它们时才会起作用。
可能对您的应用有效的是Wi-Fi直接(http://developer.android.com/guide/topics/connectivity/wifip2p.html)。
答案 1 :(得分:0)
答案 2 :(得分:0)
您可以通过以下方式使用arp缓存表来执行此操作:
BufferedReader br = null;
ArrayList<String[]> ipCache = new ArrayList<>(3);
try {
br = new BufferedReader(new FileReader("/proc/net/arp"));
String line;
while ((line = br.readLine()) != null) {
String[] split = line.split(" +");
if (split.length >= 4 ) {
if(!split[0].equals("IP") &&!split[0].equals(ROUTER_IP) ){
ipCache.add(split);
}
}
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
int ipsPonged = ipCache.size();
if(ipsPonged>0){
for (String[] client :
ipCache) {
// if one ping test succeeds we are fine
if(!ping(client[0])){
ipsPonged--;
}
}
if(ipsPonged == 0){
return true;
}
}else{
return false;
}