生活百般滋味,人生需要笑对,过完中秋节回来三天了。今晚上还有没干完的工作。但是突然有一种想写博客的感觉。想来想去能拿出来,发篇博客的东西还真的不多。想起上个月弄了一会ping IP的问题。从网上下了个DEMO(DEMO是同事帮我下的,不知道出处这里就不加链接了)加了一些自己的东西,想来既有意义又不泄密。那就发一下吧。
请有需要的朋友先下载一下DEMO,对照着DEMO看一下就行了。其实真没什么原理可言就是调用Linux的内核去ping然后获取一下返回的结果就行了。
先说一下用到的Linux拼包的命令:ping -c 3 -s 128 www.baidu.com 。
(网上大部分只是加了-c属性——ping包的个数(默认是无限ping下去,所以这个地方必须加),我我又多加了一个-s——ping包的大小(默认是64比特))
先看一下代码吧,整个过程都是在这里完成的(这里大部分和其他地方的一样,因为不知道出处,再说网上到处都是就不写出处了)
private void isPingSuccess(int pingNum, String m_strForNetAddress) {
StringBuffer tv_PingInfo = new StringBuffer();
try {
Process p = Runtime.getRuntime()
.exec("/system/bin/ping -c " + pingNum + " -s 128"
+ m_strForNetAddress); // 10.83.50.111
// m_strForNetAddress
int status = p.waitFor();
String result = "";
if (status == 0) {
result = "success";
} else {
result = "failed";
pingResult = "failded";
Message msg=new Message();
msg.obj=m_strForNetAddress;
msg.what=0;
mHandler.sendMessage(msg);
return;
}
String lost = new String();
String delay = new String();
BufferedReader buf = new BufferedReader(new InputStreamReader(
p.getInputStream()));
String str = new String();
// 读出所有信息并显示
while ((str = buf.readLine()) != null) {
str = str + "\r\n";
tv_PingInfo.append(str);
}
pingResult = tv_PingInfo.toString();
Message msg=new Message();
msg.obj=m_strForNetAddress;
msg.what=1;
mHandler.sendMessage(msg);
return;
} catch (Exception ex) {
ex.printStackTrace();
pingResult = "拼通了,但是有异常";
mHandler.sendEmptyMessage(2);
return;
}
}
想来就粘贴一下代码还不如直接转载别人的博客呢,怎么也得有点自己的东西吧。哪怕是一点点。具体到这个需求是公司服务器有好几个IP地址,需要判断一下到底哪一一个更快于是想到了这个方案。我加的部分就是同时去拼N个IP地址,看谁返回的快。用到了Handler.可以下载下代码来自己看。
手机ping IP地址这功能,只要有个DEMO就基本可以实现了,ping命令最大的用处就是判断网络的好坏,像服务器需要选择最快的通道的需求是可以解决的。
缺点是没有真正意义上你实现同时开始。因为开始ping的线程的操作是不耗时的(ping的过程才是耗时的),误差可以忽略不计。
下载地址:http://download.csdn.net/detail/jnitjy/9635357