1. 程式人生 > >Android Ping IP地址

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