• Pinger2


    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.io.LineNumberReader;
    import java.text.MessageFormat;
    import java.util.ArrayList;
    import java.util.List;


    public class Pinger{
        // IP地址
        private String ip;
        
        // Ping次数    
        private int timesNum;
        
        // 开始时间
        private String startTime;

        // 结束时间
        private String endTime;
        
        /**
         * 构造函数
         * @param ip
         * @param timesNum
         */
        public Pinger(String ip,int timesNum){
            this.ip=ip;
            this.timesNum=timesNum;
        }
        
        /**
         * Ping后计算响应的个数
         * @return
         * @throws Exception
         */
        public int countReply() throws Exception{
            String destIp=ip;
            int maxCount=timesNum;
            
            LineNumberReader input = null;
            try {
                startTime=DateTimeUtil.getCurrDateTime();
                
                // 根据操作系统组合命令
                String osName = System.getProperties().getProperty("os.name");
                String pingCmd = null;
                if (osName.startsWith("Windows")) {
                   pingCmd = "cmd /c ping -n {0} {1}";
                    pingCmd = MessageFormat.format(pingCmd, maxCount, destIp);
                } else if (osName.startsWith("Linux")) {
                    pingCmd = "ping -c {0} {1}";
                    pingCmd = MessageFormat.format(pingCmd, maxCount, destIp);
                } else {
                    throw new Exception("not support OS");
                }
                
                // ping完得到响应
                Process process = Runtime.getRuntime().exec(pingCmd);
                InputStreamReader ir = new InputStreamReader(process
                        .getInputStream());
                input = new LineNumberReader(ir);
                String line;
                List<String> reponse = new ArrayList<String>();

                while ((line = input.readLine()) != null) {
                    if (!"".equals(line)) {
                        reponse.add(line);
                        // System.out.println("====:" + line);
                    }
                }
                
                // 分析响应
                if (osName.startsWith("Windows")) {
                    return parseWindowsMsg(reponse, maxCount);
                } else if (osName.startsWith("Linux")) {
                    return parseLinuxMsg(reponse, maxCount);
                }

            } catch (IOException e) {
                System.out.println("IOException   " + e.getMessage());

            } finally {
                if (null != input) {
                    try {
                        input.close();
                    } catch (IOException ex) {
                        System.out.println("close error:" + ex.getMessage());

                    }
                }
                
                endTime=DateTimeUtil.getCurrDateTime();
            }
            
            return 0;
        }
        
        /**
         * ping次数和响应数相等算ping通
         * @return
         * @throws Exception
         */
        public boolean isPass() throws Exception{
            return countReply()==timesNum;
        }
        
        private int parseWindowsMsg(List<String> reponse, int total) {
            int countTrue = 0;
            int countFalse = 0;
            for (String str : reponse) {
                if (str.startsWith("来自") || str.startsWith("Reply from")) {
                    countTrue++;
                }
                if (str.startsWith("请求超时") || str.startsWith("Request timed out")) {
                    countFalse++;
                }
            }
            return countTrue;
        }

        private int parseLinuxMsg(List<String> reponse, int total) {
            int countTrue = 0;
            for (String str : reponse) {
                if (str.contains("bytes from") && str.contains("icmp_seq=")) {
                    countTrue++;
                }
            }
            return countTrue;
        }
        
        public String getStartTime() {
            return startTime;
        }

        public String getEndTime() {
            return endTime;
        }
        
        public static void main(String[] args) throws Exception{
            Pinger p=new Pinger("www.163.com",5);
            
            System.out.println(p.countReply());
            System.out.println(p.getStartTime());
            System.out.println(p.getEndTime());
        }
    }

  • 相关阅读:
    笨办法学习python之hashmap
    python实现三级菜单源代码
    ql的python学习之路-day3
    ql的python学习之路-day2
    Spring的数据库开发
    Spring学习之Aspectj开发实现AOP
    spring学习之依赖注入DI与控制反转IOC
    spring学习之第一个spring程序
    spring学习之spring入门
    Java线程(一)——创建线程的两种方法
  • 原文地址:https://www.cnblogs.com/heyang78/p/3371730.html
Copyright © 2020-2023  润新知