Android Ping IP地址

    生活百般滋味,人生需要笑对,过完中秋节回来三天了。今晚上还有没干完的工作。但是突然有一种想写博客的感觉。想来想去能拿出来,发篇博客的东西还真的不多。想起上个月弄了一会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




你可能感兴趣的:(安卓)