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); }
以上就是小編今天的分享了,希望可以幫助到大家。