java程序ping IP

J2EE 码拜 5年前 (2016-04-28) 672次浏览
java ping 整个个服务器全部段的IP,怎么接受各个IP的状态码或叫返回值,原因是本人要根据这个状态码返回值进行判断,假如通,本人就在JSP页面上显示这个DIV是绿色,假如不同显示红色,求高手给思路,如有代码解释更好
解决方案

35

package com.fdway.tool;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
/**
 * 
 *  ping IP地址检查IP地址能否可用
 *
 */
public class PingIPUtil {
	public static void main(String[] args) throws IOException {
		if(ping("www.fdway.com")){
			System.out.print("通");
		}else{
			System.out.print("不通");
		}
	}
	/**
	 * ping IP地址或域名
	 * @param ip 如:www.fdway.com
	 * @return 能否通讯正常
	 */
	public static boolean ping(String ip){
		Runtime runtime = Runtime.getRuntime(); // 获取当前程序的运行进对象
		Process process = null; // 声明处理类对象
		String line = null; // 返回行信息
		InputStream is = null; // 输入流
		InputStreamReader isr = null; // 字节流
		BufferedReader br = null;
		boolean res = false;// 结果
		try {
			process = runtime.exec("ping " + ip); // PING
			is = process.getInputStream(); // 实例化输入流
			isr = new InputStreamReader(is,"gbk");// 把输入流转换成字节流,传入参数为了解决"gbk"中文乱码问题
			br = new BufferedReader(isr);// 从字节中读取文本
			while ((line = br.readLine()) != null) {
				line = new String(line.getBytes("UTF-8"),"UTF-8");
				if (line.contains("TTL")) {//通了
					res = true;
					break;
				}else if(line.contains("无法访问目标主机")){//没通
					res = false;
					break;
				}else if(line.contains("请求超时")){//有丢包,但是说明通了
					res = true;
					break;
				}
			}
			is.close();
			isr.close();
			br.close();
		} catch (IOException e) {
			System.out.println(e);
			runtime.exit(1);
		}
		return res;
	}
}

本人写的工具类,拿走不谢。


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明java程序ping IP
喜欢 (0)
[1034331897@qq.com]
分享 (0)