
java ping是什么,讓我們一起了解一下?
ping命令是在項目中需要判斷目錄服務器是否在線,調研有兩種方法:使用Java API的InetAddress方式,使用Runtime.exec調用操作系統的命令CMD。
Java實現ping功能的三種方法是什么?
1、Jdk1.5的InetAddresss方式:使用時應注意,如果遠程服務器設置了防火墻或相關的配制,可能會影響到結果。另外,由于發送ICMP請求需要程序對系統有一定的權限,當這個權限無法滿足時, isReachable方法將試著連接遠程主機的TCP端口 7(Echo)。
2、最簡單的辦法,直接調用CMD:見Ping類的ping02(String)函數。

3、Java調用控制臺執行ping命令:具體調用dos命令用Runtime.getRuntime().exec實現,查看字符串是否符合格式用正則表達式實現。
Java如何實現Ping命令?
通過Runtime.exec方法來調用本地CMD命令來執行以上語句,代碼如下:
import?org.apache.log4j.Logger;
import?java.io.BufferedReader;
import?java.io.IOException;
import?java.io.InputStreamReader;
import?java.net.InetAddress;
import?java.util.regex.Matcher;
import?java.util.regex.Pattern;
/**?*?@author?tgg?*/
?
public?class?Ping?{
?
????public?static?boolean?ping(String?ipAddress)?throws?Exception?{
????????int?timeOut?=?3000?;
????????boolean?status?=?InetAddress.getByName(ipAddress).isReachable(timeOut);
????????return?status;
????}
?
????public?static?boolean?ping(String?ipAddress,?int?pingTimes,?int?timeOut)?{
????????BufferedReader?in?=?null;
????????Runtime?r?=?Runtime.getRuntime();
????????//?將要執行的ping命令,此命令是windows格式的命令
????????String?pingCommand?=?"ping?"?+?ipAddress?+?"?-n?"?+?pingTimes????+?"?-w?"?+?timeOut;
????????//?Linux命令如下
????????//?String?pingCommand?=?"ping"?-c?"?+?pingTimes?+?"?-w?"?+?timeOut?+?ipAddress;
????????try?{
????????????if?(logger.isDebugEnabled())?{
????????????????logger.debug(pingCommand);
????????????}
????????????//?執行命令并獲取輸出
????????????Process?p?=?r.exec(pingCommand);
????????????if?(p?==?null)?{
????????????????return?false;
????????????}
????????????in?=?new?BufferedReader(new?InputStreamReader(p.getInputStream()));
????????????int?connectedCount?=?0;
????????????String?line;
????????????//?逐行檢查輸出,計算類似出現=23ms?TTL=62字樣的次數
????????????while?((line?=?in.readLine())?!=?null)?{
????????????????connectedCount?+=?getCheckResult(line);
????????????}
????????????//?如果出現類似=23ms?TTL=62這樣的字樣,出現的次數=測試次數則返回真
????????????return?connectedCount?==?pingTimes;
????????}?catch?(Exception?e)?{
????????????logger.error(e);
????????????return?false;
????????}?finally?{
????????????try?{
????????????????in.close();
????????????}?catch?(IOException?e)?{
????????????????logger.error(e);
????????????}
????????}
????}
????//若line含有=18ms?TTL=16字樣,說明已經ping通,返回1,否則返回0.
????private?static?int?getCheckResult(String?line)?{??//?System.out.println("控制臺輸出的結果為:"+line);
????????Pattern?pattern?=?Pattern.compile("(\\d+ms)(\\s+)(TTL=\\d+)",????Pattern.CASE_INSENSITIVE);
????????Matcher?matcher?=?pattern.matcher(line);
????????while?(matcher.find())?{
????????????return?1;
????????}
????????return?0;
????}
?
????private?static?final?Logger?logger?=?Logger.getLogger(Ping.class);
}以上就是小編今天的分享了,希望可以幫助到大家。
