我正在尝试创建一个列出本地网络上所有连接设备的功能.
我所做的是ping地址空间x.x.x.0到x.x.x.255的任何地址,但它似乎无法正常工作.有人能以某种方式解释或扩展我的代码吗?我从电话(10.0.0.17)和默认网关(10.0.0.138)得到回复.后者甚至不应该在那里(事实上我不知道默认网关是什么,但忽略了).我虽然错过了这台电脑的IP.
我所做的是ping地址空间x.x.x.0到x.x.x.255的任何地址,但它似乎无法正常工作.有人能以某种方式解释或扩展我的代码吗?我从电话(10.0.0.17)和默认网关(10.0.0.138)得到回复.后者甚至不应该在那里(事实上我不知道默认网关是什么,但忽略了).我虽然错过了这台电脑的IP.
public ArrayList<InetAddress> getConnectedDevices(String YourPhoneIPAddress) { ArrayList<InetAddress> ret = new ArrayList<InetAddress>(); LoopCurrentIP = 0; // String IPAddress = ""; String[] myIPArray = YourPhoneIPAddress.split("\\."); InetAddress currentPingAddr; for (int i = 0; i <= 255; i++) { try { // build the next IP address currentPingAddr = InetAddress.getByName(myIPArray[0] + "." + myIPArray[1] + "." + myIPArray[2] + "." + Integer.toString(LoopCurrentIP)); // 50ms Timeout for the "ping" if (currentPingAddr.isReachable(50)) { if(currentPingAddr.getHostAddress() != YourPhoneIPAddress){ ret.add(currentPingAddr); } } } catch (UnknownHostException ex) { } catch (IOException ex) { } LoopCurrentIP++; } return ret; }
解决方法
这是一个稍微修改过的循环,应该可以解决这个问题(至少对我有用);
try { NetworkInterface iFace = NetworkInterface .getByInetAddress(InetAddress.getByName(YourIPAddress)); for (int i = 0; i <= 255; i++) { // build the next IP address String addr = YourIPAddress; addr = addr.substring(0,addr.lastIndexOf('.') + 1) + i; InetAddress pingAddr = InetAddress.getByName(addr); // 50ms Timeout for the "ping" if (pingAddr.isReachable(iFace,200,50)) { Log.d("PING",pingAddr.getHostAddress()); } } } catch (UnknownHostException ex) { } catch (IOException ex) { }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。