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




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章