Android: Wie überprüft man, ob der Server verfügbar ist?


2 Answers

Mit einem einfachen Ping-ähnlichen Test funktionierte das für mich:

static public boolean isURLReachable(Context context) {
    ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo netInfo = cm.getActiveNetworkInfo();
    if (netInfo != null && netInfo.isConnected()) {
        try {
            URL url = new URL("http://192.168.1.13");   // Change to "http://google.com" for www  test.
            HttpURLConnection urlc = (HttpURLConnection) url.openConnection();
            urlc.setConnectTimeout(10 * 1000);          // 10 s.
            urlc.connect();
            if (urlc.getResponseCode() == 200) {        // 200 = "OK" code (http connection is fine).
                Log.wtf("Connection", "Success !");
                return true;
            } else {
                return false;
            }
        } catch (MalformedURLException e1) {
            return false;
        } catch (IOException e) {
            return false;
        }
    }
    return false;
}

Vergessen Sie nicht, diese Funktion in einem Thread (nicht im Hauptthread) auszuführen.

Question

Ich entwickle eine Anwendung, die mit dem Server verbindet. Die Anmeldung und Datenübertragung funktioniert jetzt einwandfrei, wenn der Server verfügbar ist. Das Problem tritt auf, wenn der Server nicht verfügbar ist. In diesem Fall sendet die Methode eine Anmeldeanforderung und wartet auf die Antwort.

Kann jemand überprüfen, ob der Server verfügbar (sichtbar) ist?

Der Pseudocode der einfachen Logik, die implementiert werden muss, ist der folgende:

  1. String serverAddress = (Wert aus der Konfigurationsdatei lesen) // bereits erledigt
  2. boolean serverAvailable = (Überprüfen Sie, ob die Server-Serveradresse verfügbar ist) // muss implementiert werden
  3. (Hier kommt die Logik, die von serverAvailable abhängt)



public static boolean IsReachable(Context context) {
    // First, check we have any sort of connectivity
    final ConnectivityManager connMgr = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
    final NetworkInfo netInfo = connMgr.getActiveNetworkInfo();
    boolean isReachable = false;

    if (netInfo != null && netInfo.isConnected()) {
        // Some sort of connection is open, check if server is reachable
        try {
            URL url = new URL("http://www.google.com");
            //URL url = new URL("http://10.0.2.2");
            HttpURLConnection urlc = (HttpURLConnection) url.openConnection();
            urlc.setRequestProperty("User-Agent", "Android Application");
            urlc.setRequestProperty("Connection", "close");
            urlc.setConnectTimeout(10 * 1000);
            urlc.connect();
            isReachable = (urlc.getResponseCode() == 200);
        } catch (IOException e) {
            //Log.e(TAG, e.getMessage());
        }
    }

    return isReachable;
}

versuch es, arbeite für mich und vergiss actived android.permission.ACCESS_NETWORK_STATE nicht




public boolean isConnectedToServer(String url, int timeout) {
try{
    URL myUrl = new URL(url);
    URLConnection connection = myUrl.openConnection();
    connection.setConnectTimeout(timeout);
    connection.connect();
    return true;
} catch (Exception e) {
    // Handle your exceptions
    return false;
 }
}





Related