1. 程式人生 > 程式設計 >基於Java判斷網路是否正常程式碼例項

基於Java判斷網路是否正常程式碼例項

判斷網路是否正常使用

程式碼如下

/**
   * 判斷網路是否正常
   * @return
   */
  public static boolean isConnect(String ipPath){
    //定義其返回的狀態,預設為false,網路不正常
    boolean connect = false;
    /**
     * 用Runtime.getRuntime().exec()來呼叫系統外部的某個程式,
     * 他會生成一個新的程序去執行呼叫的程式。
     * 此方法返回一個java.lang.Process物件,
     * 該物件可以得到之前開啟的程序的執行結果,
     * 還可以操作程序的輸入輸出流。
     */

    Runtime runtime = Runtime.getRuntime();
    Process process;
    try {
      process = runtime.exec("ping " + ipPath);
      InputStream is = process.getInputStream();
      InputStreamReader isr = new InputStreamReader(is,"GBK");
      BufferedReader br = new BufferedReader(isr);
      String line = null;
      StringBuffer sb = new StringBuffer();
      while ((line = br.readLine()) != null) {
        sb.append(line);
      }
      System.out.println("返回值為:"+sb);
      is.close();
      isr.close();
      br.close();

      if (null != sb && !sb.toString().equals("")) {
        String logString = "";
        if (sb.toString().indexOf("TTL") > 0) {
          // 網路暢通
          connect = true;
        } else {
          // 網路不暢通
          connect = false;
        }
      }
    } catch (IOException e) {
      e.printStackTrace();
    }
    return connect;
  }

TTL:生存時間

指定資料報被路由器丟棄之前允許通過的網段數量。

TTL 是由傳送主機設定的,以防止資料包不斷在 IP 網際網路絡上永不終止地迴圈。轉發 IP 資料包時,要求路由器至少將 TTL 減小 1。

使用PING時涉及到的 ICMP 報文型別

一個為ICMP請求回顯(ICMP Echo Request)

一個為ICMP回顯應答(ICMP Echo Reply)

TTL 欄位值可以幫助我們識別作業系統型別

測試

 public static void main(String[] args) {
    System.out.println(HttpUtil.isConnect("220.181.111.188"));
  }

控制檯顯示

返回值為:正在 Ping 220.181.111.188
具有 32 位元組的資料:
來自 220.181.111.188 的回覆: 位元組=32 時間=23ms TTL=53
來自 220.181.111.188 的回覆: 位元組=32 時間=23ms TTL=53
來自 220.181.111.188 的回覆: 位元組=32 時間=24ms TTL=53
來自 220.181.111.188 的回覆: 位元組=32 時間=23ms
TTL=53220.181.111.188 的 Ping 統計資訊:
資料包: 已傳送 = 4,已接收 = 4,丟失 = 0 (0% 丟失),
往返行程的估計時間(以毫秒為單位):

最短 = 23ms,最長 = 24ms,平均 = 23ms

true

Process finished with exit code 0

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。