一、实验目的:
通过做一个简易版的、图形化界面的ping程序,进一步学习ICMP协议相关内容,同时加强网络编程的动手实践能力,以及翻阅相关资料解决问题能力。
二、实验步骤:
1、图形化界面布局
2、功能设计
3、具体实现
三、实验详细设计:
1、图像化界面
步骤一:环境的搭建,使用eclipse的windownbuilder插件,快速构建界面。如下图:
2、功能设计
设置两个功能按钮 Ping 和 Stop,一个文本框 IP Address,用来获取要测试的 IP 地址,四个 spinner 组件,用来获取测试的时延、数据包大小、请求次数等参数。一个 table 组件用来显示动态信息。界面底部的 label 组件显示数据分析结果。
3、具体实现
Ping功能:按下按钮,通过调用cmd实现ping测试,获得控制台的数据,进行处理显示在table组件里。
Stop功能:按下按钮,测试停止,通过设置一个全局控制变量来实现控制。
关键代码如下:
测试参数获取String timeout = sp_time.getValue().toString(); String times = sp_echo.getValue().toString(); String size = sp_size.getValue().toString();
调用cmd
command = "ping " + ip + " -n " + times + " -w " + timeout + " -l " +size; Process pro = Runtime.getRuntime().exec(command); BufferedReader buf = new BufferedReader (new InputStreamReader(pro.getInputStream()));
四、实验总结:
按下Ping按钮时,只能等待它执行完才能按stop按钮?
解决:通过创建一个线程,执行ping功能,就能保证stop键有效,实现中途停止测试的预期效果。
实验遗留问题:
一、界面加载的时候不能全部加载出来,尝试改变一些布置组件代码的顺序就有点效果,可能是布局问题<父容器使用的是绝对布局>。
二、连续按下ping键,在数据显示的时候会出现数据覆盖现象,可能是进程间的同步问题。设置了一个全局变量data二维数组来储存从cmd控制台获得的数据,尝试每次ping操作后清空数组data,但没效果。
实验过程gif图如下: