当前位置: 代码迷 >> J2SE >> java扫描局域网全部活动主机
  详细解决方案

java扫描局域网全部活动主机

热度:46   发布时间:2016-04-23 20:33:48.0
java扫描局域网所有活动主机
本帖最后由 qq1761310972 于 2012-12-27 17:39:17 编辑
public static void main(String[] args) throws IOException
{
String ip = "192.168.8.";
for (int i = 1 ; i < 256; i++)
{
String host = ip+i;
InetAddress ia = InetAddress.getByName(host);
boolean bool = ia.isReachable(1500);
if (bool)
{
System.out.println("主机: "+host+" 可用"); 
}

}



}
 
如上方式实现,速度过慢。
如果用多线程,导致结果错误。
public static void main(String[] args) throws IOException
{
String ip = "192.168.8.";
// for (int i = 1 ; i < 256; i++)
// {
// String host = ip+i;
// InetAddress ia = InetAddress.getByName(host);
// boolean bool = ia.isReachable(1500);
// if (bool)
// {
// System.out.println("主机: "+host+" 可用"); 
// } 
//
// new Thread1(host).start();
// } 

for (int i = 1 ; i < 15; i++)
{
String host = ip+i; 
new Thread1(host).start();



}

static class Thread1 extends Thread
{
String ip = null;

public Thread1(String ip)
{
super();
this.ip = ip;


@Override
public void run()

super.run();

 
try
{
InetAddress ia = InetAddress.getByName(ip);
boolean bool = ia.isReachable(1500);
if (bool)
{
System.out.println("主机: "+ip+" 可用"); 
}
}
catch (UnknownHostException e)
{
e.printStackTrace();
}
catch (IOException e)
{
e.printStackTrace();




}


}


求优化
要求不能 调用系统的ping来实现

------解决方案--------------------
新建一个同步对象管理IP的获取
线程里面做测试是否能够连接的处理
------解决方案--------------------
我试了,这个程序可以跑起来的.基本上整个局域网就是1s搞定
 
你的ip 是不是 192.168.1. 你的例子是 192.168.8.
  相关解决方案