Mögliche Duplizieren:
How to check if internet connection is present in java?Internet-Verbindung erkennen Java
Ich möchte sehen, ob jemand eine einfache Möglichkeit des Erfassens hat, wenn es eine Internet-Verbindung ist bei der Verwendung von Java. Die aktuelle App verwendete die "InternetGetConnectedState" -Methode in der WinInit-DLL für Windows, aber meine App muss für den Mac-Betrieb plattformübergreifend sein und auf diese Weise nicht funktionieren. Ich kenne JNI überhaupt nicht, um DLLs in Java zu verwenden, und es wurde schnell frustrierend.
Ich konnte nur daran denken, eine URL-Verbindung zu einer Website zu öffnen, und wenn das fehlschlägt, gibt false zurück. Mein anderer Weg ist unten, aber ich wusste nicht, ob das im Allgemeinen stabil war. Wenn ich mein Netzwerkkabel abziehe, erhalte ich eine UnknownHostException, wenn ich versuche, die InetAddress zu erstellen. Ansonsten, wenn das Kabel angeschlossen ist, bekomme ich ein gültiges InetAddress-Objekt. Ich habe den untenstehenden Code noch nicht auf einem Mac getestet.
Vielen Dank für alle Beispiele oder Ratschläge, die Sie zur Verfügung stellen können.
UPDATE: Der letzte Codeblock befindet sich unten. Ich entschied mich, den Rat einer HTTP-Anfrage (in diesem Fall Google) zu nehmen. Es ist einfach und sendet eine Anfrage an die Website für Daten zurückgegeben werden. Wenn ich keinen Inhalt von der Verbindung bekomme, gibt es kein Internet.
public static boolean isInternetReachable()
{
try {
InetAddress address = InetAddress.getByName("java.sun.com");
if(address == null)
{
return false;
}
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return false;
}
catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return false;
}
return true;
}
finaler Code Block:
//checks for connection to the internet through dummy request
public static boolean isInternetReachable()
{
try {
//make a URL to a known source
URL url = new URL("http://www.google.com");
//open a connection to that source
HttpURLConnection urlConnect = (HttpURLConnection)url.openConnection();
//trying to retrieve data from the source. If there
//is no connection, this line will fail
Object objData = urlConnect.getContent();
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return false;
}
catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return false;
}
return true;
}
Danke für den Kommentar. Es ist immer gut, Feedback und andere Ideen zu bekommen. Ich dachte an die URL-Verbindung oder an HttpURLConnection. Ich war mir nicht bewusst, dass dies nur DNS getestet, aber ich muss mit dieser Methode leben. –
Siehe oben stehenden Codeblock und Aktualisierungshinweis. –