它有一個Java中的API(NetworkInterface,InetAddress等),可以檢測到網卡沒有連接。如何檢測網卡是否沒有延遲地與Java連接?
問題是,解決一些網絡API有一個很大的超時。但是,如果網卡沒有連接到任何電纜,那麼我們可以跳過它。這個問題似乎只與Windows發生7
它有一個Java中的API(NetworkInterface,InetAddress等),可以檢測到網卡沒有連接。如何檢測網卡是否沒有延遲地與Java連接?
問題是,解決一些網絡API有一個很大的超時。但是,如果網卡沒有連接到任何電纜,那麼我們可以跳過它。這個問題似乎只與Windows發生7
你可以使用一些Java系統屬性來設置默認超時使用
sun.net.client.defaultConnectTimeout
套接字連接,但它似乎我檢查特定介質訪問控制器是否存在是底層操作系統的工作。我無法告訴你很多關於Windows 7的信息,自12年以來,我獲得了一個很好的操作系統(linux)。
問候, 斯特凡
我對此表示贊同(這是一個OS級別的任務,而不是JVM級別的任務)。另外,如果有人正在實現一個容器或框架,可以嘗試在JVM級別執行此操作(應用程序級別和系統級別期望之間的界限變得模糊)。 –
我不認爲更改超時將有所幫助。如果太短,則會在實際連接延遲時超時。但是在沒有網絡連接可能的情況下,有些情況(如沒有網卡),提問者想立即檢測到。 – DJClayworth
我有同樣的問題。我結束了使用它:
Enumeration<NetworkInterface> eni = NetworkInterface.getNetworkInterfaces();
while(eni.hasMoreElements()) {
Enumeration<InetAddress> eia = eni.nextElement().getInetAddresses();
while(eia.hasMoreElements()) {
InetAddress ia = eia.nextElement();
if (!ia.isAnyLocalAddress() && !ia.isLoopbackAddress() && !ia.isSiteLocalAddress()) {
if (!ia.getHostName().equals(ia.getHostAddress()))
return true;
}
}
}
適用於Java 5+。也間接檢查DNS(通過比較名稱/地址)。
很多超時設置可以在JVM級別進行控制(請參閱Snicolas的響應)。其他人,你必須在操作系統級別設置它們,並且你必須使它們成爲你的Java應用程序的操作系統級'前提條件'。也許我誤解了你的問題,但在我看來,在某種程度上,你的JVM部署必須對底層操作系統提供的內容做出一些假設。很好的問題,但(+1爲你)。 –