2012-10-04 60 views
0

我想从我的子网上扫描IP范围。 我想保存将在特定端口上听到的IP地址。我用这个代码:如何发现在端口x侦听IP地址

 for (int host = 1; host < 255; host++) { 
      String ip = networkAddress + host; 

      Socket socket; 
      try { 
       socket = new Socket(ip, port); 
       System.out.println(ip + " +"); 
       serverList.add(ip); 
       socket.close(); 
      } 
      catch (Exception e) { 
       System.out.println(ip + " -"); 
      } 
     } 

但我的问题是,它需要太多的时间... 有没有更快的方法?

回答

1

使用多线程。由于大部分时间实际上都是等待响应,因此可以安全地创建100个(甚至200个)线程,从而将总时间减少两个数量级。使用Executors类创建线程池并为每个主机提交一个任务。

请记住,serverList集合必须是线程安全的。使用shutdown()awaitTermination()对来等待结果。或者使用CompletionService收集结果。

0

使用new Socket()(无参数),然后以较短的超时(例如几秒钟)呼叫Socket.connect()