2017-01-05 70 views
0

我正在創建一個實用程序,該實用程序也具有連接到我的網絡的幾個IP地址的列表。如何確保我的Windows系統連接到網絡

我需要創建一個模塊,不斷刷新該列表,以便只有活動IP存在於該列表中。 我曾想過通過在每個IP上使用PING來實現這一點,並刪除不響應的IP。

問題是,當我的系統本身沒有連接到網絡時,我不想刪除IP,因爲在那種情況下,所有的IP都會因爲顯而易見的原因而被刪除。

如何確定我的系統已連接到某個網絡? 我正在使用Java。 我已經試過了其他問題,但找不到任何相關的東西。

[EDIT1] IP列表中手動添加組,並且服務器有幾個IP的,我不需要去關心about.So我不能在整個服務器進行查找,通過@Hoijf以下建議。此外,IP的變化始終如一,這就是爲什麼我需要更新我的列表,以便我們可以替換不響應的服務器/ IP。

+0

在JDK中查看是否有API來枚舉所有本地網絡接口或IP地址。它們存在於OS一側,但我不知道Java。如果它們存在,那麼看看機器是否仍然有分配的預期IP地址,以及適配器的狀態是否仍然處於UP狀態。 – Matthias247

+0

另一種方法是通過其中一個命令行工具查詢信息。在窗口上'ipconfig'。您可以將其作爲子流程啓動。解析相關信息並查看您的網絡適配器是否仍連接並分配了IP地址。但是,這可能比直接的Java/OS API更具開銷。 – Matthias247

回答

0

問題是,我不希望刪除IP的時候我的系統本身 沒有連接到網絡在這種情況下所有的IP的將獲得 刪除了明顯原因。

這是一個典型的網絡隔離問題。你應該考慮你的局域網仍然在運行的情況(ipconfig會顯示網卡的狀態爲UP),但是,你已經失去了互聯網連接(在某些上游路由器上)。作爲解決方案,您可以考慮ping一個始終應該啓動的引用IP /主機。 因此,您應該在您的程序中創建一個策略來ping此引用主機,以檢查是否應該將主機從活動列表中刪除。

+0

網絡隔離問題似乎是這種情況下的合法術語。我必須確定一些有保證的IP並將其用作參考。 –

0
  1. 掃描網絡並保存活動的IP。
  2. 將IP存儲在數組中並迭代該數組,直到用戶選擇停止或刷新(返回到步驟1)。
  3. 顯示每個IP的狀態。

    public class temp 
    { 
    static ArrayList<InetAddress> history = new ArrayList<InetAddress>(); 
    static Timer timer; 
    static InetAddress add; 
    public static void main(String[] args) 
    { 
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 
        int timeout = 25; 
        timer = new Timer(1000, new ActionListener() 
        { 
         @Override 
         public void actionPerformed(ActionEvent e) 
        { 
         for(InetAddress ii : history) 
         { 
          try 
          { 
           System.out.println(ii+" >> "+ii.isReachable(timeout)); 
          } catch (IOException e1){System.out.println(ii+" >>       Failed");} 
         } 
        } 
    }); 
    Thread t = new Thread(new Runnable() 
    { 
        @Override 
        public void run() 
        { 
         while(true) 
         { 
          try 
          { 
           history.add(InetAddress.getByName(br.readLine())); 
          } catch (UnknownHostException e) 
          { 
           // TODO Auto-generated catch block 
           e.printStackTrace(); 
          } catch (IOException e) 
          { 
           // TODO Auto-generated catch block 
           e.printStackTrace(); 
          } 
         } 
        } 
        }); 
        t.start(); 
        timer.start(); 
    } 
    

    }

+0

感謝您的回覆。 問題是,如果連接,我的網絡將有1000多個系統,我只需要關心已經手動添加到列表中的現有IP。這是因爲我們一次只能使用特定的IP(IP到虛擬服務器)來使用,而這些虛擬服務器通常會被刪除。這是一個荒謬的安排,但對於某些特定要求,我們的組織很適合。我的問題可能不清楚這個要求,更新。 –

+0

好吧,然後有一個用戶輸入法的IP。然後,您可以將IP保存在文件中並在稍後有必要時重新加載。掃描網絡不是必需的,原理是一樣的。 – Hoijf

+0

#hoijf所有你建議的是正確的,但不適合我的特殊用例。無論如何,正如@ sanjayk79所建議的,似乎我需要找出一些始終保持高效的IP,儘管我們的網絡非常具有活力,但仍然是一個危險的案例。 –

相關問題