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

Ich entwickle eine Anwendung, die eine Verbindung zum Server herstellt. Mittlerweile funktioniert die Anmeldung und Datenübertragung gut, wenn der Server verfügbar ist. Das Problem tritt auf, wenn der Server nicht verfügbar ist. In diesem Fall sendet die Methode eine Login-Anforderung und wartet auf die Antwort.

Wer weiß, wie man überprüft, ob der Server verfügbar ist (sichtbar)?

  • (ANDROID) zur Steuerung der Benutzersprache
  • Aufrufen einer Java-Methode von c ++ in Android
  • Fehler bei der Verwendung von Proguard mit Android Facebook sdk 3.0
  • Kann nicht auf Facebook wegen ungültiger Zugriffstoken-Fehler mit Titaniums Facebook-Modul anmelden
  • So testen Sie lokalisierte Preise mit In-App-Abrechnung v3
  • den Benachrichtigungs-Bar-Schatten in der Android-App entfernen
  • Der Pseudocode der einfachen Logik, die implementiert werden muss, ist folgende:

    1. String serverAddress = (Wert aus der Konfigurationsdatei lesen) // bereits fertig
    2. Boolean serverAvailable = (Prüfen Sie, ob der Server ServerAdresse verfügbar ist) // muss implementiert werden
    3. (Hier kommt die Logik, die von serverAvailable abhängt)

  • Veröffentlichen von Android-Updates auf den Markt - Wie lange bis sie erscheinen?
  • Phonegap Plugin: Wie konvertiert man Base64 String zu einem PNG-Bild in Android
  • Video nicht in Android spielen
  • Mit JRuby können Sie Android Java-Methoden direkt anrufen
  • Android - Reverse Listview als Meldungsanzeige
  • Umwandlung von bewegtem Ressourcenbild in Bitmap
  • 7 Solutions collect form web for “Android: Wie kann man überprüfen, ob der Server verfügbar ist?”

    Er braucht wahrscheinlich Java-Code, da er auf Android arbeitet. Das Java-Äquivalent – das ich glaube, funktioniert auf Android – sollte sein:

    InetAddress.getByName(host).isReachable(timeOut) 

    Mit einem einfachen Ping-like-Test, das hat für mich gearbeitet:

     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 auszuführen (nicht im Hauptfaden).

    Sie können verwenden

     InetAddress.getByName(host).isReachable(timeOut) 

    Aber es funktioniert nicht gut, wenn Host nicht auf tcp 7 antwortet. Sie können überprüfen, ob der Host auf diesem Port verfügbar ist, was Sie mit Hilfe dieser Funktion benötigen:

     public static boolean isHostReachable(String serverAddress, int serverTCPport, int timeoutMS){ boolean connected = false; Socket socket; try { socket = new Socket(); SocketAddress socketAddress = new InetSocketAddress(serverAddress, serverTCPport); socket.connect(socketAddress, timeoutMS); if (socket.isConnected()) { connected = true; socket.close(); } } catch (IOException e) { e.printStackTrace(); } finally { socket = null; } return connected; } 
     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; } 

    Versuchen Sie es, arbeiten Sie für mich und vergessen Sie nicht aktives android.permission.ACCESS_NETWORK_STATE

    Arbeiten Sie mit HTTP? Sie können dann ein Timeout auf Ihrer HTTP-Verbindung als solches setzen:

     private void setupHttpClient() { BasicHttpParams httpParams = new BasicHttpParams(); ConnManagerParams.setTimeout(httpParams, CONNECTION_TIMEOUT); //... ThreadSafeClientConnManager cm = new ThreadSafeClientConnManager( httpParams, schemeRegistry); this.httpClient = new DefaultHttpClient(cm, httpParams); } 

    Wenn Sie dann eine Anfrage ausführen, erhalten Sie nach dem angegebenen Timeout eine Ausnahme.

     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; } } 

    Oh, nein nein, der Code in Java funktioniert nicht: InetAddress.getByName ("fr.yahoo.com") isReachable (200) obwohl in der LogCat ich seine IP-Adresse (das gleiche mit 20000 ms Timeout) .

    Es scheint, dass die Verwendung des 'Ping' -Befehls bequem ist, zum Beispiel:

     Runtime runtime = Runtime.getRuntime ();
     Prozess proc = runtime.exec ("ping fr.yahoo.com -c 1");  // andere Server, zum Beispiel
     Proc.waitFor ();
     Int exit = proc.exitValue ();
     If (exit == 0) {// Normalausgang
         / * Erhält den Ausgabeinhalt der Ausführung des Ping-Befehls und analysiere ihn
          * Zu entscheiden, ob der Server erreichbar ist
          * /
     } Else {// abnormal exit, also entscheiden, dass der Server nicht erreichbar ist
         ...
     }
    
    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.