ping程序的实现

合集下载

用C语言实现Ping程序功能

用C语言实现Ping程序功能

用C语言实现Ping程序功能用C语言实现Ping程序功能部分人用ping命令只是作为查看另一个系统的网络连接是否正常的一种简单方法。

在这篇文章中,作者将介绍如何用C语言编写一个模拟ping命令功能的程序。

ping命令是用来查看网络上另一个主机系统的网络连接是否正常的一个工具。

ping命令的工作原理是:向网络上的另一个主机系统发送ICMP报文,如果指定系统得到了报文,它将把报文一模一样地传回给发送者,这有点象潜水艇声纳系统中使用的发声装置。

例如,在Linux终端上执行ping localhost命令将会看到以下结果:PING localhost.localdomain (127.0.0.1) from 127.0.0.1 : 56(84) bytes of data.64 bytes from localhost.localdomain (127.0.0.1): icmp_seq=0 ttl=255 time=112 usec64 bytes from localhost.localdomain (127.0.0.1): icmp_seq=1 ttl=255 time=79 usec64 bytes from localhost.localdomain (127.0.0.1): icmp_seq=2 ttl=255 time=78 usec64 bytes from localhost.localdomain (127.0.0.1): icmp_seq=3 ttl=255 time=82 usec--- localhost.localdomain ping statistics ---4 packets transmitted, 4 packets received, 0% packet lossround-trip min/avg/max/mdev = 0.078/0.087/0.112/0.018 ms由上面的执行结果可以看到,ping命令执行后显示出被测试系统主机名和相应IP地址、返回给当前主机的ICMP报文顺序号、ttl生存时间和往返时间rtt(单位是毫秒,即千分之一秒)。

Ping 程序设计原理(2023最新版)

Ping 程序设计原理(2023最新版)

Ping 程序设计原理⒈引言本文档旨在介绍 Ping 程序设计原理,包括其概述、设计原则和实现细节。

Ping 是一种网络工具,用于测试主机之间的网络连通性。

本文将讨论 Ping 的基本原理、实现方法以及使用示例。

⒉概述Ping 是一种基于 ICMP(Internet Control Message Protocol)的网络工具,它通过向目标主机发送 ICMP 回显请求消息(Echo Request)并等待目标主机的 ICMP 回显应答消息(Echo Reply)来测试主机之间的连通性。

⒊设计原则在设计 Ping 程序时,需要考虑以下原则:- 网络层协议:Ping 使用 ICMP 协议进行通信,所以需要对ICMP 协议进行理解和实现。

- 数据包处理:Ping 程序需要构造 ICMP 回显请求消息,并解析目标主机的 ICMP 回显应答消息。

- 超时机制:Ping 程序需要设置合理的超时时间,如果在超时时间内未接收到回显应答,则认为连接超时。

- 循环测试:Ping 程序可以通过循环发送 ICMP 回显请求消息来进行连通性测试。

⒋实现细节⑴ ICMP 协议ICMP 是一种网络层协议,用于在 IP 网络中传递错误消息和操作性消息。

在 Ping 程序中,我们使用 ICMP 协议来进行主机之间的连通性测试。

⑵构造 ICMP 回显请求消息Ping 程序在发送 ICMP 回显请求消息时,需要构造相应的数据包。

构造 ICMP 数据包过程需要设置以下字段:- 类型:设置为 8,表示 ICMP 回显请求消息。

- 代码:通常设为 0。

- 校验和:对 ICMP 数据包进行校验和计算。

- 标识符和序列号:用于识别 ICMP 回显请求消息和回显应答消息之间的对应关系。

- 数据:可以包含任意数据,用于传递给目标主机处理。

⑶解析 ICMP 回显应答消息Ping 程序在接收到目标主机的 ICMP 回显应答消息时,需要解析其内容。

解析 ICMP 数据包时,需要检查以下字段:- 类型:应为 0,表示 ICMP 回显应答消息。

Ping应用程序实现代码

Ping应用程序实现代码

Ping应用程序实现代码#include<stdio.h>#include<stdlib.h>#include<windows.h>#include<process.h>#include "winsock.h"#pragma comment(lib,"Ws2_32");#define SEND_SIZE 32#define PACKET_SIZE 4096#define ICMP_ECHO 8 #define ICMP_ECHOREPLY 0 struct icmp{unsigned char icmp_type;unsigned char icmp_code;unsigned short icmp_cksum;unsigned short icmp_id;unsigned short icmp_seq;unsigned long icmp_data;};struct ip{unsigned char ip_hl:4;unsigned char ip_v:4;unsigned char ip_tos;unsigned short ip_len;unsigned short ip_id;unsigned short ip_off;unsigned char ip_ttl;unsigned char ip_p;unsigned short ip_sum;unsigned long ip_src;unsigned long ip_dst;};unsigned char sendpacket[PACKET_SIZE]; unsigned charrecvpacket[PACKET_SIZE]; struct sockaddr_in dest_addr; struct sockaddr_in from_addr; int sockfd;int pid;unsigned short cal_chksum(unsigned short *addr,int len);int pack(int pack_no);int unpack(unsigned char *buf,int len); void send_packet(void);void recv_packet(void);void main(){int argc;char *argv[2];argc = 2;argv[0]= "-t";argv[1]="192.168.1.2";struct hostent *host;struct protoent *protocol; WSADATA wsaData;int timeout=1000;int SEND_COUNT=4;int i;char *par_host;par_host=argv[argc-1]; //IP??Öµswitch(argc){case 2: break;case 3: if(strcmp(argv[1],"-t")==0){SEND_COUNT=10000;break;}//fall throughdefault:printf("usage: %s [-t] Host name or IP address\n",argv[0]); exit(1);}if(WSAStartup(0x1010,&wsaData)!=0) {printf("wsastartup error\n");exit(1);}if( (protocol=getprotobyname("icmp") )==NULL){printf("getprotobyname error\n");exit(1);}printf("%s\n",protocol->p_name);printf("%s\n",protocol->p_aliases);printf("%d\n",protocol->p_proto);system("pause");if( (sockfd=socket(AF_INET,SOCK_RAW,protocol->p_proto) )<0){printf("socket error\n");exit(1);}if(setsockopt(sockfd,SOL_SOCKET,SO_RCVTIMEO,(char*)&timeout,sizeof (timeout))<0)fprintf(stderr,"failed to set recvtimeout: %d\n",WSAGetLastError());if(setsockopt(sockfd,SOL_SOCKET,SO_SNDTIMEO,(char*)&timeout,sizeof (timeout))<0)fprintf(stderr,"failed to set sendtimeout: %d\n",WSAGetLastError());memset(&dest_addr,0,sizeof(dest_addr));dest_addr.sin_family=AF_INET;printf("%s\n",par_host);if(host=gethostbyname(par_host) ){printf("%s\n",par_host);memcpy( (char *)&dest_addr.sin_addr,host->h_addr,host->h_length); //resolve address to hostnameif(host=gethostbyaddr(host->h_addr,4,PF_INET))par_host=host->h_name;printf("%s\n",par_host); }elseif( dest_addr.sin_addr.s_addr=inet_addr(par_host)==INADDR_NONE) {printf("Unkown host %s\n",par_host);exit(1);}pid=getpid();printf("%d\n",pid);system("pause");printf("Pinging %s [%s]: with %d bytes ofdata:\n\n",par_host,inet_ntoa(dest_addr.sin_addr),SEND_SIZE);for(i=0;i<SEND_COUNT;i++){send_packet();recv_packet();Sleep(1000);}}//this algorithm is referenced from other's/*Ð?ÑéËã??*/unsigned short cal_chksum(unsigned short *addr,int len) {int nleft=len;int sum=0;unsigned short *w=addr;unsigned short answer=0;while(nleft>1){ sum+=*w++;nleft-=2;}if( nleft==1){ *(unsigned char *)(&answer)=*(unsigned char *)w;sum+=answer;}sum=(sum>>16)+(sum&0xffff);sum+=(sum>>16);answer=~sum;return answer;}//?ò?üint pack(int pack_no){int packsize;struct icmp *icmp;packsize=8+SEND_SIZE;icmp=(struct icmp*)sendpacket;icmp->icmp_type=ICMP_ECHO;icmp->icmp_code=0;icmp->icmp_cksum=0;icmp->icmp_seq=pack_no;icmp->icmp_id=pid;icmp->icmp_data=GetTickCount();icmp->icmp_cksum=cal_chksum( (unsigned short *)icmp,packsize); /*Ð?ÑéËã??*/return packsize;}//?â?üint unpack(unsigned char *buf,int len) {struct ip *ip;struct icmp *icmp;double rtt;int iphdrlen;ip=(struct ip *)buf;iphdrlen=ip->ip_hl*4;icmp=(struct icmp *)(buf+iphdrlen);if( (icmp->icmp_type==ICMP_ECHOREPLY) && (icmp->icmp_id==pid) ) {len=len-iphdrlen-8;rtt=GetTickCount()-icmp->icmp_data;printf("Reply from %s: bytes=%d time=%.0fms TTL=%dicmp_seq=%u\n",inet_ntoa(from_addr.sin_addr),len,rtt,ip->ip_ttl,icmp->icmp_seq);return 1;}return 0;}//??ËÍvoid send_packet(){int packetsize;static int pack_no=0;packetsize=pack(pack_no++);if( sendto(sockfd,(char *)sendpacket,packetsize,0,(structsockaddr *)&dest_addr,sizeof(dest_addr) )<0 ) printf("Destination host unreachable.\n");printf("send NO %d\n",pack_no-1); }//?ÓÊÕvoid recv_packet(){int n,fromlen;int success;fromlen=sizeof(from_addr); do{if( (n=recvfrom(sockfd,(char*)recvpacket,sizeof(recvpacket),0,(struct sockaddr *)&from_addr,&fromlen)) >=0)success=unpack(recvpacket,n);else if (WSAGetLastError() == WSAETIMEDOUT){printf("Request timed out.\n");return;}}while(!success);}。

socket实现ping命令的原理

socket实现ping命令的原理

socket实现ping命令的原理简介在计算机网络中,pi n g命令是一种用于测试两台主机之间网络连接性的常用工具。

本文将介绍使用so ck et编程实现p in g命令的原理。

什么是sock et?在网络通信中,s ock e t是一种通信机制,它可以使得不同计算机上的程序能够进行数据交换。

通过使用so ck et,我们可以实现不同计算机之间的网络连接和数据传输。

pin g命令的作用p i ng命令用于测试两台主机之间的网络连接性以及网络延迟。

它发送一条IC MP(I nt er ne t Co nt ro lM es sa geP r ot oc ol)回显请求消息到目标主机,并等待该主机返回回显应答消息。

通过这种方式,我们可以确定目标主机是否可达以及网络延迟的情况。

使用socke t编程实现pin g命令使用so ck et编程实现p in g命令需要以下几个步骤:步骤一:创建s o c k et首先,我们需要创建一个so ck et,用于与目标主机建立网络连接。

i m po rt so ck et创建一个IPv4的UDP socketc l ie nt_s oc ke t=soc k et.s oc ke t(so cke t.A F_IN ET,s oc ket.SO CK_ D G RA M)步骤二:设置超时时间为了避免长时间等待应答,我们可以设置一个超时时间。

当发送p in g请求后,如果在超时时间内未收到应答,我们可以认为网络连接存在问题。

设置超时时间为1秒钟c l ie nt_s oc ke t.set t im eo ut(1)步骤三:发送p i n g请求使用so ck et发送pi n g请求需要构建一个I CM P回显请求消息,并发送给目标主机。

i m po rt st ru ct构建ICMP回显请求消息ICMP回显请求ICMP Code为0填充校验和为0标识符(任意数值)序列号(任意数值)构建ICMP消息,计算校验和i c mp_h ea de r=st ruc t.p ac k('!BB HH H',i cm p_ty pe,i cm p_c o de,i cm p_c he ck su m,ic mp_i de nt if ie r,ic mp_s eq ue nc e)计算校验和更新校验和发送ping请求c l ie nt_s oc ke t.send to(i cm p_he ad er,(de st in at io n_ip,0))步骤四:接收应答接下来,我们需要等待目标主机的回应,并对回应消息进行解析。

python实现ping命令小程序

python实现ping命令小程序

python实现ping命令⼩程序ping的原理是发送⼀个ICMP请求包,然后根据⽬的地址的应答包来判断是否能够和这个主机进⾏通信。

我们使⽤python实现,借助于scapy来进⾏编写程序。

from scapy.all import *import time,struct,random# 编写ping⼀个包的函数。

def ping_one(dst = '36.152.44.95',ttl_no = 64,id_no = 345,seq_no = 5):start_time = time.time()# 将时间转换为⼆进制序列。

time_to_bytes = struct.pack('>d',start_time)# 进⾏发送ICMP包,发送出去⼀个,收回来⼀个。

ping_one_result = sr1(IP(dst = dst,ttl = ttl_no)/ICMP(seq = seq_no,id = id_no)/time_to_bytes, timeout = 1, verbose=False)# print(ping_one_result.show())# 判断收回来的包是不是ICMP的应答包,和序列号是否相同。

try:if ping_one_result.getlayer('ICMP').type == 0 and ping_one_result.getlayer('ICMP').seq == seq_no:# print('进⾏解析包')# 提取IP头部中的源IP地址,也就是我们ping的IP地址。

reply_src_IP = ping_one_result.getlayer('IP').src# 提取序列号。

reply_icmp_seq = ping_one_result.getlayer('ICMP').seq# 提取ttlreply_icmp_ttl = ping_one_result.getlayer('IP').ttl# 数据长度等于数据长度(Raw) + 垫⽚长度(Padding) + 8字节(ICMP头部长度)if ping_one_result.getlayer(Raw) != None:Raw_length = len(ping_one_result.getlayer(Raw).load)else:Raw_length = 0if ping_one_result.getlayer(Padding) != None:Padding_length = len(ping_one_result.getlayer(Padding).load)else:Padding_length = 0# 计算数据长度。

计算机网络基础课程设计Ping程序实现

计算机网络基础课程设计Ping程序实现

计算机网络基础课程设计Ping程序实现计算机网络工程课程设计报告题目:Ping程序的实现学生姓名:学号:专业班级:计科专业班同组姓名: 指导教师:设计时间:2022年下学期第某周指导老师意见:评定成绩:签名:日期:年月日目录一、课程设计的目的和意义2二、课程设计的内容和要求21.内容:22.要求:2三、课程设计的相关技术2四、课程设计过程21.Ping主模块22.功能控制模块43.数据报解析模块5五、课程设计小结6六、参考文献7七、附录(程序清单)7八、心得体会11一、课程设计的目的和意义利用ICMP数据包、C语言实现Ping命令程序,能实现基本的Ping操作,发送ICMP回显请求报文,用于测试—个主机到只一个主机之间的连通情况。

通过本程序的训练,使学生熟悉ICMP报文结构,使学生对ICMP有更深的理解,掌握Ping程序的设计方法,掌握网络编程的方法和技巧,从而编写出功能更强大的程序。

二、课程设计的内容和要求1.内容:用C语言实现Ping命令程序,能实现基本的Ping操作,发送ICMP回显请求报文,用于测试—个主机到只一个主机之间的连通情况。

2.要求:1)独立完成程序的设计、编码和调试。

2)系统利用C语言实现,程序调试环境为TurboC或VC;3)按照课程设计规范书写课程设计报告。

4)采用VC环境进行调试运行。

三、课程设计的相关技术由于Ping程序是面向用户的应用程序,该程序使用ICMP的封装机制,通过IP协议来工作。

为了实现直接对IP和ICMP包进行操作,实验中使用RAW模式的ocket编程。

首先定义IP数据报首部,在IP数据报的基础上定义ICMP数据报首部,并初始化一些全局变量。

接着自定义填充ICMP数据报字段函数FillICMPData()、校验和函数checkum()、解读ICMP报首部函数DecodeICMPHeader()、释放资源函Cleanup()。

最后主函数通过调用这些函数来实现Ping命令功能。

ping程序设计与实现课程设计

ping程序设计与实现课程设计

ping程序设计与实现课程设计一、课程目标知识目标:1. 学生能理解ping程序的工作原理,掌握网络诊断的基本方法。

2. 学生能描述IP协议、ICMP协议的基本概念及其在ping程序中的应用。

3. 学生了解计算机网络的通信原理,掌握如何利用ping程序检测网络连通性。

技能目标:1. 学生能运用所学知识,独立编写简单的ping程序。

2. 学生通过实践操作,提高问题分析及解决能力,具备基本的网络诊断技巧。

3. 学生掌握使用编程工具(如:IDE、编译器等)进行代码编写、调试和优化。

情感态度价值观目标:1. 学生培养对计算机网络的兴趣,激发学习编程的热情。

2. 学生在学习过程中,培养团队协作、沟通表达的能力,增强自信心。

3. 学生通过本课程的学习,认识到网络技术在实际应用中的重要性,培养对网络安全的责任感。

分析课程性质、学生特点和教学要求,本课程旨在让学生掌握ping程序的设计与实现,结合实际操作,提高学生的编程能力和网络诊断技巧。

课程目标具体、可衡量,有助于教师进行教学设计和评估。

通过本课程的学习,学生将具备基本的网络编程知识和技能,为今后的学习和工作打下坚实基础。

二、教学内容1. 网络基础知识回顾:IP协议、ICMP协议、网络层通信原理。

2. ping程序工作原理:发送ICMP请求、接收ICMP回复、计算往返时间(RTT)。

3. 编程语言基础:C语言或Python语言的基本语法,重点掌握数据类型、控制结构、函数定义。

4. ping程序设计与实现:- 环境搭建:安装编程工具、配置网络环境。

- 代码编写:根据ping程序工作原理,编写发送和接收ICMP请求的代码。

- 调试与优化:调试代码,处理异常情况,优化程序性能。

5. 实践操作:分组进行实际操作,组内讨论、分析问题,相互协作完成ping 程序编写。

6. 网络诊断技巧:运用ping程序检测网络连通性,分析网络延迟、丢包等问题。

教学内容安排和进度:第一课时:网络基础知识回顾,介绍ping程序工作原理。

编程模拟ping程序

编程模拟ping程序

一、实验题目编程模拟ping程序,实现Ping程序的基本功能,即接收到一个ping程序数据包后给出回应。

二、原理概述ping命令是用来查看网络上另一个主机系统的网络连接是否正常的一个工具。

ping命令的工作原理是:向网络上的另一个主机系统发送ICMP报文,如果指定系统得到了报文,它将把报文一模一样地传回给发送者,这有点象潜水艇声纳系统中使用的发声装置。

想要了解ping命令的原理必须了解ICMP协议、ICMP报文格式和IP报文格式。

(1)ICMP报文结构ICMP 报文结构: ICMP 报文前四个字节为报文头部分,第一个字节为报文类型,第二个字节未用, 第三四个字节为报文的校验和。

从第四个字节开始为长度可变的数据段,该段的内容取决于ICMP 的类型,本文所要使用的请求报文和请求应答报文的数据段中前四个字节是报文的标识符和顺序号。

对于整个ICMP 报文来说其长度最长不能超过64K字节。

ICMP 报文结构如图1 所示。

0 7 8 15 16 31 32 47 48 63 64(2)IP报文结构ICMP 报文和其它位于IP 层的报文一样是作为IP 报文的数据段加上IP 报文头组成IP 数据报发出,其中IP 报文头长度一般为20 个字节。

如图2所示。

三、设计方案根据实验题目查找相关资料,熟悉及理解ping的工作原理,从而进一步设计ping程序的功能图和系统流程图。

准备工作做好后就可上机调试,验证其可行性并查找漏洞,完善ping程序。

(1) ping程序的设计包含了4部分:IP、ICMP的头结构,主函数模块,CMP数据包校验和的计算和使用说明模块。

(2)系统流程图首先在主函数里定义变量同时进行初始化,然后检查参数的正确性,如果参数不正确或者没有输入参数,则显示用户帮助信息(Usage ),并结束程序;如果参数正确,则对指定目的地执行Ping命令,如果Ping通,则显示Ping结果并释放占用资源,如果没有Ping通,则报告错误信息,并释放占用资源。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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<from.length;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<ip.length;c++)//循环输出ip数组中的每个元素,同时加符号".",得到ip地址格式的字符串
{
ipV al+=ip[c];//ipV al=ipV al+ip[c]
if(c<ip.length-1)
ipV al+=".";//输出IP地址的格式
}
return ipV al;
}
private int[] stringArToIntAr(String[] ar)//实现字符串数组转换为整形数组输出{
int[]result=new int [ar.length];
for(int a=0;a<ar.length;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地址范围
}
}
//package cd.ch02;
final class Timer//定义一个final类Timer
{
private long start;
private long end;
public void start()//开始时间
{
reset();//调用reset()方法重置start和end
System.gc();//然后运行垃圾回收,释放所占用内存
start=System.currentTimeMillis();//记录开始时间为currentTimeMillis当前时间}
public void end()//结束时间
{
System.gc();
end=System.currentTimeMillis();
}
public long duration()//计算响应时间的方法
{
return(end-start);
}
public void reset()//重置开始和结束时间
{
start=0; end=0;
}
}。

相关文档
最新文档