先上结论:通过调用系统自带的Ping命令来实现,使用exitValue()值来判断Ping的结果。按照惯例,0表示ok,1表示不通。
private static void pingTest1() throws Exception
{
String[] ipStrings = {
"127.0.0.1",
"10.0.0.1",
"8.8.8.8",
"10.0.0.2",
"114.114.114.114",
"114.114.114.11",
"114.114.114.114"};
String line = null;
for (String ip : ipStrings)
{
Process pro = Runtime.getRuntime().exec("ping " + ip + " -n 1 -w 50");
BufferedReader buf = new BufferedReader(new InputStreamReader(pro.getInputStream()));
while((line = buf.readLine()) != null)
System.out.println(line);
pro.waitFor();
System.out.println(ip + " : " + pro.exitValue());
}
}
解析:
1.Ping就是一个exe,因此命令中无需加上cmd;测试发现,前面加了cmd与cmd /k 效果一样,Ping执行完毕后cmd进程并不会自动结束,导致java程序无法自动结束;
2.对于Ping结果的判断,测试发现无法像批处理一样通过读取系统的errorlevel来实现。首先该值既不是系统环境变量,也不是系统属性,无法通过java内置的函数来获取;只能将"echo %errorlevel%"作为一条cmd命令,当然前面还要加上“cmd /c”的前缀;测试中发现,无论Ping通与否,程序读取到的errorlevel值都为0.
网上给出的其他方法分析
1.isReachable(int timeout)
乍一看这个方法真方便,实际上该方法在windows平台下不太实用。首先,在Win7 64位系统下测试结果:对任何主机均返回false。 javadoc写道,如果能够获得特权,它将使用ICMP来实现,否则使用TCP端口7(注:echo)来实现。然而windows主机一般是不会开启该端口的。搜索到有一老外的Blog说在linux下通过配置java虚拟机来让其获得权限从而使用ICMP,他也表示不知道在windows下如何解决。还看到一个Blog上写道将timeout设置到非常大的数字可保证准确的结果,然而我实测无效。
2.有人提到了一个实现了Ping.Class的NIO:http://docs.oracle.com/javase/1.5.0/docs/guide/nio/example/Ping.java
查看源码发现它是通过Socket连接目标的13端口,那么很明显该方法也不行。
3.使用Socket构造ICMP报文
这个应该是可行的,只不过基本上就是一个堆积字节数组的过程,比较麻烦。因此这显然不是最佳方案啦~
Java实现Windows平台下Ping的最佳方法的更多相关文章
-
Windows平台下Git服务器搭建
第一步:下载Java,下载地址:http://www.java.com/zh_CN/ 第二步:安装Java.安装步骤不再详述. 第三步:配置Java环境变量. 右键”计算机” => ”属性” = ...
-
Mac平台与Windows平台下AndroidStudio增量升级
Android Studio增量升级什么情况下使用最合适呢? 比如现在的as版本是2.2版本,而你的as版本2.0版本,这个时候点Check For Updates就没有反应了,因为你已经2个有版本没 ...
-
Windows 平台下Git 服务器搭建
由于项目中一直在使用git作为版本管理,自己对git的理解.使用都还不是怎么的熟悉,所以准备深入了解一下git及一些常用命令的使用,于是干脆把服务端架上,通过自己的PC作为服务端同时作为客户端的角色进 ...
-
【转】Windows平台下Git服务器搭建
Windows平台下Git服务器搭建 Posted on 2015-05-18 21:29 阿祥当码农 阅读(7637) 评论(0) 编辑 收藏 该文章转自:http://www.codeceo.co ...
-
Windows 平台下 LiteIDE 的安装和使用
1. 安装 Go 语言并设置环境变量 参考博客<Windows 平台下 Go 语言的安装和环境变量设置>. 2. MinGW 的下载和安装 Windows 下的 Go 调试还需要安装 Mi ...
-
Windows平台下在Emacs中使用plantuml中文乱码问题(已解决)
Windows平台下在Emacs中使用plantuml中文乱码问题(已解决) */--> code {color: #FF0000} pre.src {background-color: #00 ...
-
[转]Windows平台下Makefile学习笔记
Windows平台下Makefile学习笔记(一) 作者:朱金灿 来源:http://blog.csdn.net/clever101 决心学习Makefile,一方面是为了解决编译开源代码时需要跨编译 ...
-
Windows平台下PHP开发环境的配置
Windows平台下PHP开发环境的配置 一.基本环境 1.Windows XP 32位 2.Apache 2.2.25,下载地址:http://mirror.bit.edu.cn/apache/ht ...
-
windows平台下VLC2.0.5编译
windows平台下VLC2.0.5编译说明 时隔一年多,又要搞流媒体了,不过这次是要做流媒体服务器. 暂时决定使用vlc+ffmpeg+live555,虽然听有些前辈说这个组合的性能较差,只能作为学 ...
随机推荐
-
WPF弹出带蒙板的消息框
效果图 思路 拿到父级窗体的内容,放入一个容器里,再在容器里放入一个半透明层.将整个容器赋给父级窗体的内容. 关闭时反向操作. 代码 消息窗弹出时 /// <summary> /// 弹出 ...
-
Android图形系统之Surface、SurfaceView、SurfaceHolder及SurfaceHolder.Callback之间的联系
1.Surface Surface extends Objectimplements Parcelable java.lang.Object ↳ android.view.Surface Cla ...
-
开发extjs常用的插件
Spket是目前支持Ext 2.0最为出色的IDE. 它采用.jsb project file 文件并将继承于基类和所有文档的内容嵌入到生成代码提示的Script doc中.注:不支持配置项的代码提示 ...
-
jquery serialize()方法的扩展
Jquery提供的序列化表单方法serialize方法确实方便,但是我在使用的时候发现了一个弊端:当我使用type:“post”进行ajax请求的时候, 这个时候参数data:$("#myf ...
-
was性能调优前期准备
http://www.ibm.com/developerworks/cn/websphere/library/techarticles/0707_wudan/#resources was应用服务器环境 ...
-
微信小程序左右滑动切换图片酷炫效果(附效果)
开门见山,先上效果吧!感觉可以的用的上的再往下看. 心动吗?那就继续往下看! 先上页面结构吧,也就是wxml文件,其实可以理解成微信自己封装过的html,这个不多说了,不懂也没必要往下看了. < ...
-
JVM学习五:JVM之类加载器之编译常量和主动使用
在学习了前面几节的内容后,相信大家已经对JAVA 虚拟机 加载类的过程有了一个认识和了解,那么本节,我们就继续进一步巩固前面所学知识和特殊点. 一.类的初始化回顾 类在初始化的时候,静态变量的声明语句 ...
-
kali2016.2(debian)快速安装mysql5.7.17
糊里糊涂的删除了kali原本的mysql5.6.27版本,原本的mysql与很多软件关联在一起,每次安装都失败,后来把相关的都卸载了(悲催的浪费了一天) 下载地址 debian mysql下载地址 ...
-
Android自动化测试之Monkeyrunner使用方法及实例
目前Android SDK里自带的现成的测试工具有monkey 和 monkeyrunner两个.大家别看这俩兄弟名字相像,但其实是完完全全不同的两个工具,应用在不同的测试领域.总的来说,monkey ...
-
使用php与mysql构建我们的网站
技术这个玩意就是要不断的去使用,才能够熟能生巧.今天我记录的使用php与mysql构建我们的网站,其实是我两年前的时候写的项目. 现在看看自己以前写的个人项目,也会感叹时间究竟带走了什么?好记性不如烂 ...