ping程序的实现
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
import .*;//java的网络包
import java.io.*;//java的io包
public class Ping {//定义类Ping
private int timeOut;//定义私有整型变量timeout
private Timer t;//声明一个Timer类的对象t,但未分配内存
public Ping(int timeOut){//构造方法进行初始化
this.timeOut=timeOut;
t=new Timer();//给对象t分配内存。
}
public String pingRang(String from,String to){ //确定ping地址的范围
int [] ipFrom=stringArToIntAr(from.split("\\."));//整形数组变量用来接收起始ip地址
int [] ipTo=stringArToIntAr(to.split("\\."));//接收终止的ip地址
String output="";//定义字符串型变量output用来接收结果
ipTo[3]=ipTo[3]+1;//ipTo 数组里的地址的第四个元素加1
while(!matchIP(ipFrom,ipTo)){//
output+="Pinging:"+printIP(ipFrom);// output变量用来接收printIP (ipFrom)的返回结果
output+="("+ping(printIP(ipFrom))+") Response Time:"+responseTime()+"\n";//再接收ping(printIP(ipFrom))的结果
increaseIPrange(ipFrom,ipFrom.length-1);//调用increaseIPrange(),传入的参数为ipFrom起始地址、ipFrom数组长度-1,即为3
}
return output;
}
private void increaseIPrange(int[] ipFrom,int curBit){//逐渐增加IP 地址的范围,curBit表示ip地址的最后一位
ipFrom[curBit]+=1;//ipFrom[3],即表示最后一位每次加1
if (ipFrom[curBit]>255){ //如果最后一位大于255
ipFrom[curBit]=0; //则重新置为0
if(curBit>0) //如果大于0
increaseIPrange(ipFrom,curBit-1);//则再次调用本方法,将增加位置改为ip地址的第三位
}
}
private boolean matchIP(int[] from,int[] to){//判断起始ip地址和终止ip地址是否在同一个网段中
for(int c=0;c if(from[c]!=to[c]){ return false; } } return true; } private String printIP(int[] ip)//将数组形式存放的ip地址转换成一般ip地址格式后打印出来 { String ipV al=""; for(int c=0;c { ipV al+=ip[c];//ipV al=ipV al+ip[c] if(c ipV al+=".";//输出IP地址的格式 } return ipV al; } private int[] stringArToIntAr(String[] ar)//实现字符串数组转换为整形数组输出{ int[]result=new int [ar.length]; for(int a=0;a { result[a]=Integer.parseInt(ar[a]); } return result; } public String ping (String host)//获取主机地址名 { try{ t.start();//通过t调用Timer类中的start()方法 InetAddress address=InetAddress.getByName(host);//给出主机的名称,决定主机的IP地址 String retV al=pingAddress(address); t.end(); return retV al; } catch(UnknownHostException e)//UnknownHostException - 如果找不到host 的IP地址 { return"指定主机没有找到"; } } public String ping (byte []host)//将给定的ip地址创建成InetAddress 对象 { try{ t.start(); InetAddress address=InetAddress.getByAddress(host);//给出原始的ip地址,返回一个InetAddress对象 String retV al=pingAddress(address);//调用pingAddress()方法,实现ping功能,并取得返回结果 t.end(); return retV al;//返回结果 } catch(UnknownHostException e)//指示主机IP 地址无法确定而抛出的异常。 { return"指定主机没有找到"; } } private String pingAddress(InetAddress address){//实现ping命令功能,返回字符串格式的原始IP地址。 try{//可能会抛出异常 if(address.isReachable(timeOut))//调用isReachable()方法,如果测试可以达到address地址 return"连接成功";//则返回连接成功 else return"连接超时"; } catch(IOException e){//当发生某种I/O 异常时,捕获此异常。 return"不可达"; } } public long responseTime(){//响应时间的长度 return t.duration();//调用Timer类的duration()方法计算响应时间。 } public static void main(String args[]){//main主函数 Ping pt=new Ping(2000);//设置响应时间的最大时间 System.out.println(pt.pingRang("192.168.1.1","192.168.1.5"));//需要测试的ip地址范围