Vấn đề của tôi khá đơn giản. Chương trình của tôi yêu cầu thông báo ngay lập tức nếu kết nối mạng bị mất. Tôi đang sử dụng Java 5, vì vậy tôi không thể sử dụng các tính năng rất tiện dụng của NetworkInterface.Java Kiểm tra nhanh kết nối mạng
Hiện nay tôi có hai phương pháp khác nhau của việc kiểm tra kết nối mạng:
(try..catches loại bỏ)
Một phương pháp:
URL url = new URL("http://www.google.com");
HttpURLConnection urlConnect = (HttpURLConnection) url.openConnection();
// trying to retrieve data from the source. If offline, this line will fail:
Object objData = urlConnect.getContent();
return true;
Cách 2:
Socket socket = new Socket("www.google.com", 80);
netAccess = socket.isConnected();
socket.close();
return netAccess;
Tuy nhiên, cả hai phương pháp này đều chặn cho đến khi hết thời gian chờ trước khi trả về false. Tôi cần một phương thức sẽ trả về ngay lập tức, nhưng tương thích với Java 5.
Cảm ơn!
EDIT: Tôi quên đề cập rằng chương trình của tôi phụ thuộc vào địa chỉ IP, không phải tên DNS. Vì vậy, việc kiểm tra lỗi khi giải quyết một loạt là ra ...
EDIT 2:
đặn ra một giải pháp cuối cùng sử dụng NetworkInterface:
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;
}
}
}
Tôi không quen thuộc với Java, nhưng tôi nghĩ rằng 'http: //' trong phương pháp 2 là quá nhiều. – glglgl
Bạn có thể sử dụng Java 5.0 để chạy một ứng dụng Java 6 hoặc 7 có thể sử dụng NetworkInterface.;) –
có vẻ như bạn cần một phương thức gọi lại để thông báo cho bạn khi có điều gì đó thay đổi trong trạng thái mạng. –