Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 459|回复: 0

[网络编程学习]ping局域网IP的多线程程序

[复制链接]
  • TA的每日心情
    开心
    2021-3-12 23:18
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2014-11-1 00:01:05 | 显示全部楼层 |阅读模式
    import java.io.*;
       import java.util.*;

    public class Ip{

       static public HashMap ping; //ping 后的结果集
      //当前线程的数量, 防止过多线程摧毁电脑
       static int threadCount = 0;


       public Ip() {
        ping = new HashMap();
        }
       

       public  void Ping(String ip) throws Exception{
         //最多30个线程
         while(threadCount>30)
           Thread.sleep(50);
         threadCount +=1;
         PingIp p = new PingIp(ip);
         p.start();
       }  
      
       
       
       

       
      

       public void PingAll() throws Exception{
         
          for(int i=1;i<=255;i++){  //对所有局域网Ip
           String iip="10.10.1."+i;   
            Ping(iip);
          }
         //等着所有Ping结束
         while(threadCount>0)
           Thread.sleep(50);
       }
       public static void main(String[] args) throws Exception{
         Ip ip= new Ip();
         ip.PingAll();
         java.util.Set entries = ping.entrySet();
         Iterator iter=entries.iterator();
          
         String k;
         while(iter.hasNext()){
           Map.Entry entry=(Map.Entry)iter.next();
           String key=(String)entry.getKey();
           String value=(String)entry.getValue();

           if(value.equals("true"))
            System.out.println(key+"-->"+value);
         }

       }
    class PingIp  extends Thread{

       public String ip;           // IP

       
       
       public PingIp(String ip){
         this.ip=ip;
        }

       
       public void run(){
         try{
           Process p= Runtime.getRuntime().exec ("ping "+ip+ " -w 300 -n 1");
           InputStreamReader ir = new InputStreamReader(p.getInputStream());
           LineNumberReader input = new LineNumberReader (ir);
           //读取结果行
           for (int i=1 ; i<7; i++)
             input.readLine();
           String line= input.readLine();
          // System.out.println("OK!!"+ip+"--OUT:-->"+line);

           if (line.length()<17 || line.substring(8,17).equals("timed out"))
              ping.put(ip,"false");
           else
             ping.put(ip,"true");
           //线程结束
           threadCount -= 1;
         }catch (IOException e){}
       }
       
       }

    }
    程序运行结果:

    C:java>java Ip
    10.10.1.1-->true
    10.10.1.131-->true
    10.10.1.2-->true
    10.10.1.170-->true
    10.10.1.244-->true
    10.10.1.7-->true
    10.10.1.44-->true
    10.10.1.3-->true
    10.10.1.213-->true
    10.10.1.145-->true
    10.10.1.156-->true
    10.10.1.223-->true
    10.10.1.181-->true
    10.10.1.10-->true
    10.10.1.80-->true
    10.10.1.55-->true
    10.10.1.43-->true
    10.10.1.207-->true
    10.10.1.187-->true
    10.10.1.94-->true
    10.10.1.133-->true
    10.10.1.54-->true
    10.10.1.23-->true
    10.10.1.194-->true
    10.10.1.51-->true
    10.10.1.22-->true
    10.10.1.107-->true
    10.10.1.36-->true
    10.10.1.234-->true
    10.10.1.24-->true
    10.10.1.137-->true
    10.10.1.25-->true
    10.10.1.85-->true
    10.10.1.130-->true
    10.10.1.5-->true
    10.10.1.4-->true

    C:java>
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2025-2-25 17:13 , Processed in 0.369974 second(s), 46 queries .

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc.

    快速回复 返回顶部 返回列表