1. 程式人生 > >使用 Java 測試網路連通性的幾種方法

使用 Java 測試網路連通性的幾種方法

在網路程式設計中,有時我們需要判斷兩臺機器之間的連通性,或者說是一臺機器到另一臺機器的網路可達性。在系統層面的測試中,我們常常用 Ping 命令來做驗證。儘管 Java 提供了比較豐富的網路程式設計類庫(包括在應用層的基於 URL 的網路資源讀取,基於 TCP/IP 層的 Socket 程式設計,以及一些輔助的類庫),但是沒有直接提供類似 Ping 命令來測試網路連通性的方法。本文將介紹如何通過 Java 已有的 API,程式設計實現各種場景下兩臺機器之間的網路可達性判斷。在下面的章節中,我們會使用 Java 網路程式設計的一些類庫 java.net.InetAddress 和 java.net.Socket,通過例子解釋如何模擬 Ping 命令。


簡單判斷兩臺機器的可達性

一般情況下,我們僅僅需要判斷從一臺機器是否可以訪問(Ping)到另一臺機器,此時,可以簡單的使用 Java 類庫中 java.net.InetAddress 類來實現,這個類提供了兩個方法探測遠端機器是否可達

Java
123 booleanisReachable(int timeout)// 測試地址是否可達 booleanisReachable(NetworkInterface netif,int ttl,int timeout)// 測試地址是否可達.

簡單說來,上述方法就是通過遠端機器的 IP 地址構造 InetAddress 物件,然後呼叫其 isReachable 方法,測試呼叫機器和遠端機器的網路可達性。注意到遠端機器可能有多個 IP 地址,因而可能要迭代的測試所有的情況。

清單一:

void isAddressAvailable(String ip){     try{ 
      InetAddress address = InetAddress.getByName(ip);//ping this IP 

      if(address instanceof java.net.Inet4Address){ 
         System.out.println(ip + " is ipv4 address"); 
      }else
if(address instanceof java.net.Inet6Address){ 
         System.out.println(ip + " is ipv6 address"); 
      }else{ 
         System.out.println(ip + " is unrecongized"); 
      } 

      if(address.isReachable(5000)){ 
          System.out.println("SUCCESS - ping " + IP + " with no interface specified"); 
      }else{ 
         System.out.println("FAILURE - ping " + IP + " with no interface specified"); 
      } 

      System.out.println("\n-------Trying different interfaces--------\n"); 

      Enumeration<NetworkInterface> netInterfaces = 
            NetworkInterface.getNetworkInterfaces();    
      while(netInterfaces.hasMoreElements()) {    
           NetworkInterface ni = netInterfaces.nextElement();    
           System.out.println(
"Checking interface, DisplayName:" + ni.getDisplayName() + ", Name:" + ni.getName());
     if(address.isReachable(ni, 0, 5000)){ 
          System.out.println("SUCCESS - ping " + ip); 
      }else{ 
          System.out.println("FAILURE - ping " + ip); 
      } 


      Enumeration<InetAddress> ips = ni.getInetAddresses();    
      while(ips.hasMoreElements()) {    
          System.out.println("IP: " + ips.nextElement().getHostAddress());   
      } 
      System.out.println("-------------------------------------------"); 
      } 
        }catch(Exception e){ 
      System.out.println("error occurs."); 
      e.printStackTrace(); 
        }       
 }

程式輸出

Java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 --------------START-------------- 10.13.20.70isipv4 address SUCCESS-ping10.13.20.70with no interfacespecified -------Trying different interfaces-------- Checking interface,DisplayName:MS TCP Loopback interface,Name:lo FAILURE-ping10.13.20.70 IP:127.0.0.1 ------------------------------------------- Checking interface,DisplayName:Intel(R)Centrino(R)Advanced-N6200AGN- Teefer2 Miniport,Name:eth0 FAILURE-ping10.13.20.70 IP:9.123.231.40 ------------

相關推薦

使用 Java 測試網路通性方法

在網路程式設計中,有時我們需要判斷兩臺機器之間的連通性,或者說是一臺機器到另一臺機器的網路可達性。在系統層面的測試中,我們常常用 Ping 命令來做驗證。儘管 Java 提供了比較豐富的網路程式設計類庫(包括在應用層的基於 URL 的網路資源讀取,基於 TCP/I

使用Java測試網路通性方法

概述 在網路程式設計中,有時我們需要判斷兩臺機器之間的連通性,或者說是一臺機器到另一臺機器的網路可達性。在系統層面的測試中,我們常常用Ping命令來做驗證。儘管Java提供了比較豐富的網路程式設計類庫(包括在應用層的基於URL的網路資源讀取,基於TCP/IP層的Socket程式設計,以及一些輔助的類庫)

java寫入文件的方法分享

java一、FileWritter寫入文件 FileWritter,字符流寫入字符到文件。默認情況下,它會使用新的內容取代所有現有的內容,然而,當指定一個真(布爾)值作為FileWritter構造函數的第二個參數,它會保留現有的內容,並追加新內容在文件的末尾。 替換所有現有的內容與新的內容。

java word轉pdf的方法

轉載:https://blog.csdn.net/qwert678000/article/details/72770109 最近公司需要以word為模版,填充資料,然後轉成pdf。做了一點點研究 1.使用xdocreport進行轉(優點效率高,缺點對word格式要求較大,適合對生成pdf要求

Java 獲取當前日期的方法

import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; public class getCurrDate { public st

java實現動態編譯的方法

所謂動態編譯,就是在程式執行時產生java類,並編譯成class檔案。 import java.io.BufferedReader; import java.io.InputStream; im

JAVA獲得當前時間的方法

package com.xjp.common.util; import java.sql.Timestamp;import java.text.ParsePosition;import java.text.SimpleDateFormat;import java.util.D

(轉)java向MySQL插入當前時間的四方式和java時間日期格式化的方法(案例說明)

轉載地址  https://www.cnblogs.com/zhaotiancheng/p/6413067.html 資料庫操作經常會用到時間,例如start_time,end_time,(在資料庫中是datetime型別,) 對應關係 mys

Java 延時常見的方法

1、 用Thread就不會iu無法終止 new Thread(new Runnable() { public void run() { while (true) { test(

java中獲取時間的方法

1. 通過Date類來獲取當前時間 Date day=new Date(); SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:

pytorch學習: 構建網路模型的方法

利用pytorch來構建網路模型有很多種方法,以下簡單列出其中的四種。 假設構建一個網路模型如下: 卷積層--》Relu層--》池化層--》全連線層--》Relu層--》全連線層 首先匯入幾種方法用到的包: import torch import torch.nn.functional as F

java 獲取HttpRequest Header 的方法

import java.util.Enumeration; import java.util.HashMap; import java.util.Map; import javax.servlet.http.HttpServletRequest; import org.springframework.bea

java讀取配置檔案的方法

在現實工作中,我們常常需要儲存一些系統配置資訊,大家一般都會選擇配置檔案來完成,本文根據筆者工作中用到的讀取配置檔案的方法小小總結一下,主要敘述的是spring讀取配置檔案的方法。 一.讀取xml配置檔案 (一)新建一個java bean(HelloBean.java

Java 字串去掉空格的方法

public class Trim { public static void main(String[] args) { String str = " Hello Geni

java中求素數的方法彙總及比較

首先來看兩道題目: 1. 請實現一個函式,對於給定的整型引數 N,該函式能夠把自然數中,小於 N 的質數,從小到大打印出來。比如,當 N = 10,則打印出:2 3 5 7**重點內容** 2. 請

java 讀取配置檔案的方法

      讀取.properties配置檔案在實際的開發中使用的很多,總結了一下,有以下幾種方法(僅僅是我知道的): 一.通過jdk提供的java.util.Properties類         此類繼承自java.util.HashTable,即實現了Map介面

linux下robotframework執行測試用例的方法

1、執行指定的測試用例檔案(Test Suite)     [[email protected] cases]# pybot purge.txt 2、執行整個porject目錄下的所有測試用例     [[email protected] cases]

Java獲取檔案路徑的方法

第一種: File f = new File(this.getClass().getResource("/").getPath()); System.out.println(f); 結果: C:\Documents%20and%20Settings\Administrato

Java遍歷List的方法及其效能比較

參考: StackOverflow 上有人給出了上面幾種遍歷方式。【yasi】個人覺得方法2,即 for (E element : list) 方式最優雅簡潔,其餘幾種方法不夠“現代化”。 StackOverflow 上指出,方法2在效能上和方法3(顯式地對迭代器

Java讀取配置檔案的方法以及路徑問題

在現實工作中,我們常常需要儲存一些系統配置資訊,大家一般都會選擇配置檔案來完成,本文根據筆者工作中用到的讀取配置檔案的方法小小總結一下,主要敘述的是spring讀取配置檔案的方法。 一.讀取xml配置檔案 (一)新建一個java bean(HelloBean.java) j