java扫描局域网中可用ip_使用java线程扫描局域网ip简单方案
package com.cjh.thread; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.InetAddress; import java.net.UnknownHostException; import java.util.ArrayList; import java.util.Iterator; /** * 使用java线程扫描局域网ip简单方案 * @author Administrator * */ public class LanIP { public static void main(String[] args) { System.out.println("开始......"); LanIP ip = new LanIP(); ArrayList list = ip.getLanIPArrayList(); System.out.println("最后有多少个===>"+list.size()); } public ArrayList getLanIPArrayList() { ArrayList arrayIP = null; try { InitSystem initSystem = null; initSystem = new InitSystem(); Thread thread = new Thread(initSystem); thread.start(); thread.join(); arrayIP = initSystem.getArrayIPUsed(); } catch (UnknownHostException e) { e.printStackTrace(); } catch (InterruptedException e) { e.printStackTrace(); } return arrayIP; } private class InitSystem implements Runnable { private int firstIP = 2;// 查询的 IP 地址的最后一位起始点 private int lastIP = 255;// 查询的 IP 地址的最后一位结束点 private volatile ArrayList arrayThread;// 子线程段 private final int MAXTHREADNUM = 30; // 最大同时进行的子线程数量 private int threadNumNow;// 当前正在进行的子线程数量 private volatile ArrayList arrayIP;// 局域网查询所有可能的 IP 地址的结果集 private volatile ArrayList arrayIPUsed;// 局域网查询已经使用的 IP 地址的结果集 private InitSystem(String ip) { System.out.println("IP===>"+ip); arrayIP = new ArrayList(); arrayIPUsed = new ArrayList(); arrayThread = new ArrayList(); setIPAddressList(ip); } private InitSystem() throws UnknownHostException { this(InetAddress.getLocalHost().getHostAddress()); } private synchronized ArrayList getArrayIPUsed() { try { System.out.println("getArrayIPUsed: arrayIP.size===>"+arrayIP.size()); while (arrayIP.size() > 0) { Thread.sleep(300); } } catch (InterruptedException e) { e.printStackTrace(); } return arrayIPUsed; } private void setIPAddressList(String ip) { // 根据这个 ip 地址查询它所在的局域网的所有可能 IP 地址的集合 int lastPointIndex = ip.lastIndexOf('.'); String stringIPHead = ip.substring(0, ++lastPointIndex); System.out.println("stringIPHead===>"+stringIPHead); String stringIP = null; for (int i = firstIP; i <= lastIP; i++) { stringIP = stringIPHead + i; arrayIP.add(stringIP); } System.out.println("进放到这里...arrayIP的总个数:"+arrayIP.size()); } public void run() { synchronized (this) { try { System.out.println("run() arrayIP.size()===>"+arrayIP.size()); System.out.println("run() threadNumNow===>"+threadNumNow); System.out.println("arrayThread.size()"+arrayThread.size()); while (arrayIP.size() > 0) { while (threadNumNow >= MAXTHREADNUM) { System.out.println("线程超出30,中止后面的..."); for (Thread thread : arrayThread) { if (!thread.getState().equals( Thread.State.TERMINATED)) { thread.join(5); } --threadNumNow; } arrayThread = new ArrayList(); } Thread thread = new Thread(new InnerClass(arrayIP .remove(0))); thread.start(); threadNumNow++; arrayThread.add(thread); } } catch (Exception e) { e.printStackTrace(); } } } private class InnerClass implements Runnable { // 线程查询一个 IP 是否是可以连接的 是则加入到相应的 IP 数组 private String ip; private InnerClass(String ip) { System.out.println("InnerClass ip===>"+ip); this.ip = ip; } private boolean isUsedIPAddress(String ip) { System.out.println("isUsedIPAddress===>"+ip); synchronized (this) { System.out.println("进入此地....."); // 判断这个 IP 地址在当前局域网中是否是可连接的 IP Process process = null; BufferedReader bufReader = null; String bufReadLineString = null; try { process = Runtime.getRuntime().exec( "ping " + ip + " -w 100 -n 1"); bufReader = new BufferedReader(new InputStreamReader( process.getInputStream())); for (int i = 0; i < 6 && bufReader != null; i++) { bufReader.readLine(); } bufReadLineString = bufReader.readLine(); System.out.println("bufReadLineString===>"+bufReadLineString); if (bufReadLineString == null) { process.destroy(); return false; } if (bufReadLineString.indexOf("timed out") > 0 || bufReadLineString.length() < 17 || bufReadLineString.indexOf("invalid") > 0) { process.destroy(); return false; } } catch (IOException e) { e.printStackTrace(); } process.destroy(); return true; } } public void run() { synchronized (this) { if (isUsedIPAddress(ip)) { arrayIPUsed.add(ip); } } } } } }
java扫描局域网中可用ip_使用java线程扫描局域网ip简单方案相关推荐
- C#列出局域网中可用SQL Server服务器(续)
上一篇文章展示了使用COM对象如何列出局域网中的 SQL Server服务器信息,后来还发现在.Net中有现成的类可用,而不需要使用不太熟悉的COM对象了,这样岂不是更好?下面我把代码展示给大家: u ...
- java mysql tinyint_Msq 中tinyint字段对应 java中哪个类型?
展开全部 MySql 中的tinyint(1)的使用 在MySql中如何定义像Java中类型的Boolean类型数据..其实,mysql中 是没有直接定义成Boolean这种数据类型. 它只能定义成 ...
- win10局域网中只能发现部分计算机,Windows10系统局域网中共享计算机找不到怎么办...
局域网共享可以方便局域网中的计算机自动调用共享文件用打印机等资源,但有用户出现访问不了查看不到其他共享计算机的情况,在Win10极速纯净版系统中,有用户发现升级Win10的无法查看其他计算机和共享,而 ...
- 局域网中“隐身”妙招 类似360的局域网隐身
局域网中"隐身"妙招 方法一:打开本地连接属性("控制面板→网络连接"),在"常规"选项卡中选中"Microsoft网络的文件和 ...
- 连接局域网中计算机与传输介质的网络设备是,局域网传输介质与连接设备.PPT...
局域网传输介质与连接设备.PPT 计算机网络基础 杜煜 <数据通信与网络技术> 第2章局域网传输介质与连接设备 第2章局域网传输介质与连接设备 2.1 局域网传输介质 本章学习目标 l? ...
- java获取当前电脑的ip_使用Java获取当前计算机的IP地址
问题 我正在尝试开发一个系统,其中有不同的节点在不同的系统上或在同一系统上的不同端口上运行. 现在所有节点都创建一个Socket,其目标IP作为称为自举节点的特殊节点的IP.然后节点创建自己的Serv ...
- java电商中遇到的问题,java电商项目常见异常
1. java.lang.nullpointerexception 这个异常大家肯定都经常遇到,异常的解释是"程序遇上了空指针",简单地说就是调用了未经初始化的对象或者是不存在的对 ...
- java 调用jira_java中通过JIRA REST Java Client 使用jira
首先创建springboot工程,使用maven进行构建,pom依赖如下: org.springframework.boot spring-boot-starter-web org.springfra ...
- 在无线局域网中 便携式计算机一般通过,浅析无线局域网技术的应用
浅析无线局域网技术的应用 维普资讯 http://www.cqvip.com 星 昌圆 量 浅 析 无 线 局 域 网 技 术 的 应 用 文.李继承 ( 长春 市科技信 息研 究所) 摘 要 :无 ...
最新文章
- Tabhost嵌套以及Tab中多个Activity跳转的实现
- 从清明节到儿童节,打造一个童话城市
- python爬虫抓收费图片_简单的Python抓taobao图片爬虫
- 弹性计算双周刊 第7期
- 《Scala机器学习》一一3.3 应用
- mysql-connector-mysql 8.0 (spring-boot-starter-parent 管理的版本) + Activiti 6.x 自动建表失败
- 宠物商店 三层关系小结 显示宠物列表
- MANIFEST.MF
- 英雄会被表彰,这些技术与代码也将载入史册!
- 2015年全国大学生电子设计竞赛A题(双向DC-DC变换器)训练总结(硬件部分)
- 数据结构试卷错题详细分析
- 什么是 Widevine 数字版权管理 (DRM),它为什么重要
- 王小锤学Java:retainAll函数那点儿事
- Google 就业岗分析
- iphone4s更换电池_如果更换了iPhone电池后仍然出现问题该怎么办
- 华为无线AC 配置内置Portal认证和Radius服务器示例
- 【转】100本最棒的英文侦探小说
- Python Flask框架
- python批量修改文件名字为1,2,3,4,5等等
- vue设置div块隐藏与显示(v-show)