在Java程序(使用JNI)中有新連接可用時,Windows操作系統是否有任何方式通知? 目前,我必須檢查這一點的唯一方法是通過輪詢嘗試下載網頁的功能。如果下載成功並且沒有例外,我可以猜測有互聯網連接。當Windows連接到網絡時收到通知
然而,一個更好的解決方案可能是這一個:
- 在程序啓動,檢查互聯網連接
- 如果沒有可用的Internet連接, 「註冊」 爲Windows網絡通知和wait()
- 用戶連接到互聯網時,Windows操作系統通知渣機=>線程醒來
- 做一些東西....
在Java程序(使用JNI)中有新連接可用時,Windows操作系統是否有任何方式通知? 目前,我必須檢查這一點的唯一方法是通過輪詢嘗試下載網頁的功能。如果下載成功並且沒有例外,我可以猜測有互聯網連接。當Windows連接到網絡時收到通知
然而,一個更好的解決方案可能是這一個:
下做平,比下載頁成本更低,並且可以更改超時:
InetAddress.getByName("stackoverflow.com").isReachable(4000)
放入一個線程循環,在低優先級:
while(! InetAddress.getByName("stackoverflow.com").isReachable(4000)) {
Thread.slepp(1000L);
}
我沒有更好。
InetAddress.isReachable
文檔:
測試該地址是否可達。嘗試通過 實現嘗試訪問主機,但嘗試訪問主機時會盡最大努力,但防火牆和服務器配置可能會阻止導致無法訪問狀態的請求,而某些特定端口可能是可訪問的。如果可以獲得特權,典型實現 將使用ICMP ECHO請求,否則它將嘗試在目的地主機的端口7(Echo) 上建立TCP連接。
似乎與[Windows的網絡接口準備就緒時的通知](http://stackoverflow.com/q/4546878/291641)(儘管不是Java)有關。 [WM_DEVICECHANGE](http://msdn.microsoft.com/en-us/library/windows/desktop/aa363480(v = vs.85).aspx)消息似乎也可能是讓系統通知您這個。 – patthoyts
是的,但如何聽窗口消息?我敢打賭,有一些JNI庫可以做到這一點... –