zl程序教程

您现在的位置是:首页 >  后端

当前栏目

基于Java实现的ping项目【100010686】

JAVA项目 实现 基于 ping
2023-09-11 14:17:49 时间

1. 设计思想说明

1.1 设计环境

操作系统:win8

编程环境:Eclipse

编程语言:Java

1.2 设计思想

ping 程序是用来探测主机到主机之间是否可通信,如果不能ping到某台主机,表明不能和这台主机建立连接。ping 使用的是ICMP协议,它发送ICMP回送请求消息给目的主机。ICMP协议规定:目的主机必须返回ICMP回送应答消息给源主机。如果源主机在一定时间内收到应答,则认为主机可达。

ICMP协议通过IP协议发送的,IP协议是一种无连接的,不可靠的数据包协议。因此,保证数据送达的工作应该由其他的模块来完成。其中一个重要的模块就是ICMP(网络控制报文)协议。

当传送IP数据包发生错误,比如主机不可达,路由不可达等等,ICMP协议将会把错误信息封包,然后传送回给主机。给主机一个处理错误的机会,这也就是为什么说建立在IP层以上的协议是可能做到安全的原因。ICMP数据包由8bit的错误类型和8bit的代码和16bit的校验和组成。而前 16bit就组成了ICMP所要传递的信息。

PING利用ICMP协议包来侦测另一个主机是否可达。其原理是用类型码为0的ICMP发请求,受到请求的主机则用类型码为8的ICMP回应。ping程序来计算间隔时间,并计算有多少个包被送达。用户就可以判断网络大致的情况。

本课程设计使用java来实现ping功能。 为了使用java来实现ping的功能,

可以有三种方法:第一种是用Java 1.5,java.net包中的InetAddress实现ICMP ping的功能,虽然代码简单,但不可靠,在Linux系统下会不可靠;第二种是使用java调用cmd命令,这种方式最简单,可以把ping的过程显示在本地;第三种也是使用java调用控制台的ping命令,具体的思路是这样的:通过程序调用类似“ping 127.0.0.1 -n 10 -w 4”的命令,这命令会执行ping十次,如果通顺则会输出类似“来自127.0.0.1的回复: 字节=32 时间<1ms TTL=64”的文本(具体数字根据实际情况会有变化),其中中文是根据环境本地化的,有些机器上的中文部分是英文,但不论是中英文环境, 后面的“<1ms TTL=62”字样总是固定的,它表明一次ping的结果是能通的。如果这个字样出现的次数等于10次即测试的次数,则说明127.0.0.1是百分之百能连通的。技术上具体调用dos命令用Runtime.getRuntime().exec实现,查看字符串是否符合格式用正则表达式实现。本次课设选用的是使用第三种方法。

1.3 结构流程图

2. 关键程序说明

public Ping(String ip){
	this.ip=ip;
runtime=Runtime.getRuntime();// 将要执行的ping命令,此命令是windows格式的命令pattern=Pattern.compile("(\\d+)ms\\s+TTL=(\\d+)",Pattern.CASE_INSENSITIVE); // 通过 compile 静态方法实例化 Pattern 对象 ,构造用来匹配耗时和TTl的正则表达式
ttl=0;
	usage=0;
	}
public boolean ping(){
	try {
//直接调用系统的ping命令,求要发送的回显请求数和等待每次回复的超时时间(ms)
		Process p=runtime.exec("ping "+ip+" -n 1 -w "+TIME_OUT);
		if(p==null)return false;
		//从键盘接受一行输入的ip地址或IP段
BufferedReader buff=new BufferedReader(newInputStreamReader(p.getInputStream()));
		String line;
		Matcher m;
		while((line=buff.readLine())!=null){
		m=pattern.matcher(line);
		if(m.find()){
			 	usage=Integer.parseInt(m.group(1));
				ttl=Integer.parseInt(m.group(2));
				return true;
				}
			}
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return false;
	}

3. 实现界面和功能以及屏幕截图。

如图,在文本框中输入IP地址或者IP地址段或者主机名,点击ping按钮实现ping的过程,而下边的文本域则输入ping的结果,即消耗的时间和生存时间.

4. 调试过程中遇到的问题和解决的方法

问题一:界面显示一直不完整,按钮一点它按钮的字就不见了;

解决方法:更新jdk为较新的版本,界面显示正常;

问题二: 刚开始用Java网络包中的类InetAddress实现,不知道怎么实现TTL,而且即使ping 127.0.0.1时,延时也达到1s。

解决方法:改用调用控制台的命令,调用dos命令用Runtime.getRuntime().exec实现

问题三:ip段不知道如何一条条输出

解决方法:把ip地址换成长整形的形式,一个个入队,再把长整形换成IP地址的形式一个个出队。

5. 测试与分析

  1. 未输入IP地址时点击Ping,提示未输入IP

  1. 输入错误IP时,显示输入IP有误

  1. 该网络连接不到输入的IP时,输出结果为不可达

  1. 输入IP或者主机名输出的结果:

  1. 输入IP地址段输出的结果:

6. 用户使用说明

6.1打开程序

点击文件夹中的ping.jar文件,打开即为ping程序的界面;

6.2输入数据

在请输入IP或IP段右边的文本框中输入您要Ping的IP地址或者IP地址段或者主机名;

6.3运行程序

点击Ping按钮运行程序,会在文本域中输出相应的结果;

6.4退出程序

点击程序右上角的红叉,关闭程序。

7. 总结

本课程设计的优点是界面简洁,功能简单易懂;不足之处是Linux运行用不了,因为Linux上的命令行ping出的结果与windows的显示不一样。

课程设计是培养学生综合运用所学知识,发现、提出、分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程。随着科学技术发展的日新日异,当今计算机应用在生活中可以说得是无处不在,我们要多实践多动手,才能跟上知识的更新速度。此次课程设计让我收获良多。只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,提高自己的实际动手能力和独立思考的能力。在该设计过程中我遇到了许多的问题,让我发现了自己的不足之处,对以前所学过的知识理解得不够深刻,看到了自己的实践经验还是比较缺乏,理论联系实际的能力还急需提高,只有经过不断的努力才能为以后的生活工作打下良好的基础。

♻️ 资源

在这里插入图片描述

大小: 1.13MB
➡️ 资源下载:https://download.csdn.net/download/s1t16/87425380