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