专栏首页葫芦java 多线程主机Ip扫描

java 多线程主机Ip扫描

1、创建集合用来存所有的ip地址,并指定实现类。
        private Queue<String> allIp;
        allIp = new LinkedList <String>();
        for (int i = mini ; i <= maxi; i++) {
                     String host = hosts + "." + i;
                      allIp.offer( host);
              }
2、创建runnable实现类,创建 getIp()方法每次取一个ip地址测试,synchronized 用以同步处理。
private class rHost implements Runnable {
               private String taskIp = null;
              Message msg = new Message();
               private LinkedList link = new LinkedList();
               @Override
               public void run() {

                      try {
                            while ((taskIp = getIp()) != null) {
                                   if (flag == 1) {
                                         InetAddress addr = InetAddress.getByName(taskIp);
                                          status = (( s - mini) * 100 / ( maxi - mini));
                                          if (addr.isReachable(gettimeout())) {
                      count++;

                                                 link.add(taskIp);
                                         }
                                          handler1.sendEmptyMessage( status);

                                  } else if (flag == 2) {
                                         Thread. currentThread().interrupt();
                                  }

                           }
                            if (!link .isEmpty()) {
                                   msg. obj = link;
                                   pingHandler.sendMessage(msg );
                           }
                     } catch (Exception e) {
                           e.printStackTrace();
                     }

              }
               public String getIp() {
                     String ip = null;

                      synchronized (allIp ) {
                           ip = allIp.poll();
                            s++;
//                         System.out.println(s);
                     }
                      return ip;
              }

3、创建线程池添加上面的runnable接口。
        public void startPing() {
               count = 0;
               int threadNum = 100;
              ExecutorService executor = Executors. newFixedThreadPool(threadNum);
               for (int i = 0; i < threadNum; i++) {
                     executor. execute(new rHost());
              }
              executor.shutdown();
               try {
                      while (!executor.isTerminated()) {
                           Thread. sleep(100);

                     }
              } catch (Exception e) {
                     e.printStackTrace();
              }
       }

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • linux AWK统计出账

    葫芦
  • java 构造器

    葫芦
  • java 复用类

    葫芦
  • Android开发 - 汉字转拼音首字母

    工作中经常会遇到的一些排序问题,比如 按汉字的拼音首字母排序,比如人名排序等,就要用到下面的方法了,思路:

    zhangyunfeiVir
  • Hadoop源码篇--Reduce篇

    Reduce文件会从Mapper任务中拉取很多小文件,小文件内部有序,但是整体是没序的,Reduce会合并小文件,然后套个归并算法,变成一个整体有序的文件。

    LhWorld哥陪你聊算法
  • 一种二叉堆的泛化实现

    所谓二叉堆,其实就是一种完全二叉树或者近似完全二叉树,树中父节点的键值总是保持某种固定的序关系于任何一个子节点的键值,且每个节点的左子树和右子树也都是二叉堆.

    用户2615200
  • POJ1013 称硬币

    原题为POJ上的1013题,链接为:http://poj.org/problem?id=1013 代码如下:

    AI那点小事
  • MVC项目开发中那些用到的知识点(Jquery ajax提交Json后台处理)

      jQuery提供的ajax方法能很方便的实现客户端与服务器的异步交互,在asp.net mvc 框架使用jQuery能很方便地异步获取提交数据,给用户提供更...

    aehyok
  • python自学第三节课(笔记)

    被缩进的内容(print()函数)和if条件语句组成了一个代码块(一个整体),成为了if条件下的内部命令。

    小老鼠
  • MVC项目开发中那些用到的知识点(Jquery ajax提交Json后台处理)

      jQuery提供的ajax方法能很方便的实现客户端与服务器的异步交互,在asp.net mvc 框架使用jQuery能很方便地异步获取提交数据,给用户提供更...

    aehyok

扫码关注云+社区

领取腾讯云代金券