基于Java实现的ping项目【100010686】
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. 测试与分析
- 未输入IP地址时点击Ping,提示未输入IP
- 输入错误IP时,显示输入IP有误
- 该网络连接不到输入的IP时,输出结果为不可达
- 输入IP或者主机名输出的结果:
- 输入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
相关文章
- 《JAVA与模式》之简单工厂模式
- Java反射机制详解(3) -java的反射和代理实现IOC模式 模拟spring
- 用eclipse 检索SVN 上 myEclipse 建的web项后,成java项目解决方法
- 【JAVA】在java类中连接和读取mysql数据库的实例(控制台显示)
- Java 拆分String String equals 方法的实现
- java根据key或value对Map进行排序
- Java面试中如何介绍自己的项目经验?
- 【Java】java数据库连接池配置的几种方法
- Java 图片处理——如何生成高清晰度而占有磁盘小的缩略图
- java中获取类加载路径和项目根路径的5种方法
- Java学习-050-AES256 之 java.security.InvalidKeyException: Illegal key size or default parameters 解决方法
- 《大规模Java平台虚拟化与调优》——2.3 Active-Active架构与现代化数据平台
- CentOS7 nginx+tomcat实现代理访问java web项目让项目支持jsp和php
- Java_java动态编译整个项目,解决jar包找不到问题
- Java之throw和throws的区别及java中的异常处理
- java.lang.OutOfMemoryError: Java heap space错误及处理办法(收集整理、转)
- java结合node.js非对称加密,实现密文登录传参——让前后端分离的项目更安全
- Java中核心注解的作用及其使用,了解Spring容器装载的过程和机制,自定义注解来实现自动配置项目依赖环境,包括mybatis、Dubbo、log4j、RabbitMQ、redis相关等自动配置
- Java中java.util.Arrays参考指南