Android代碼中使用Ping命令


項目中需要搜索同一WIFI局域網中的設備並進行通信,暫時想到的辦法是得到局域網網段的地址,因為同一局域網中的IP地址前三位是相同的,而第四位的范圍從0~250,所以對第四位進行遍歷搜索,能ping通的IP加入在線列表,再用IP進行通信。由於遍歷過程非常耗時,需要開啟多線程去PING.開銷不能太大,最多開啟30個線程。

需要在Android中使用LInux底層的命令:

如執行Ping命令 格式為  ping -c 1 -w 5

其中參數-c 1是指ping的次數為1次,-w是指執行的最后期限,單位為秒,也就是執行的時間為5秒,超過5秒則失敗.

Ping命令代碼:

Process p = Runtime.getRuntime().exec("ping -c 1 -w 5 " + ip);

主要的代碼部分:

 

public void runPingIPprocess(final String ipString)
	{
		final Thread pingThread = new Thread()
		{
			@Override
			public void run()
			{
				try
				{
					Log.i("Light", "ip address" + ipString);
					// ping ip地址
					Process p = Runtime.getRuntime().exec(
							"ping -c 1 -w 5 " + ipString);
					int status = p.waitFor();
					if (status == 0)
					{
						Log.i("Light", "ping ip");
						Map<String, Object> map = new HashMap<String, Object>();
						map.put("ip", ipString);
						ping.add(map);
						pingSize++;
						if (pingSize > 10)
						{
							pingSize = 0;
							// setPing(ping);
							mUpdaHandler.sendMessage(createMessage(RESULT_MESSAGE, ping));
						}
					} else
					{
					}
					threadCount--;
				} catch (Exception e)
				{
					threadCount--;
					Log.e("Light", e.getLocalizedMessage());
				} finally
				{
				}
			}
		};
		pingThread.start();
	}


主要來講講 Runtime.exec這個方法

 

Runtime 封裝着java程序的運行時環境。通過Runtime實例,java應用能夠與其運行的環境連接。Runtime在jvm中保持一個單例,所以不能通過Runtime類的構造函數。只能通過Runtime.getRuntime()來獲的當前Runtime的一個實例。獲得Runtime實例后,就可以通過Runtime的exec()方法在當前jvm進程外啟動其他進程了。

在Runtime類中存在四個exec()重載方法

public Process exec(String command);
public Process exec(String [] cmdArray);
public Process exec(String command, String [] envp);
public Process exec(String [] cmdArray, String [] envp);

 

對於每個這樣的方法,都會產生一個命令,並可能攜帶一組參數——被傳遞給一個特定操作系統的函數調用。隨后創建一個特定操作系統的進程(一個運行着的程序),procss類將持有該程序返回Java VM的引用。這個procss類是一個抽象類,具體子類的實現依賴於不同的底層操作系統。

 

你可以通過三種可能的輸入參數到這些方法:

1、一個字符串,表示程序執行和程序的任何參數。

2、一個字符串數組,通過參數來區分出程序的實現功能。

3、一個環境變量的數組

傳遞環境變量是,使用格式化的方式:名稱=值。如果你使用單個字符串和它的參數的方式調用exec()的重載,,注意字符串是通過StringTokenizer類被解析,使用空格作為分隔符

關於Runtime類使用陷阱可以看看這篇文章:

http://www.cfanz.cn/index.php?c=article&a=read&id=33583


完整的實例代碼: 

http://download.csdn.net/detail/u011176244/6348059




 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM