Warum würde URLConnection Timeout nach 6+ Minuten statt 5 Sekunden?

Ich kopiere diese Methode verbatim aus meiner Anwendung, die noch nicht vollständig ist, aber es versucht, mir eine Timeout-Stack-Spur zu geben, wenn die Dinge nicht reibungslos gehen:

protected boolean isHttpAlive() { boolean isHttpOk = false; HttpURLConnection httpConnection = null; try { URL gurl = new URL("http://www.amazon.com/"); URLConnection connection = gurl.openConnection(); connection.setConnectTimeout(5 * 1000); // 5 seconds! httpConnection = (HttpURLConnection) connection; int responseCode = httpConnection.getResponseCode(); if (responseCode == HttpURLConnection.HTTP_OK) isHttpOk = true; } catch (Exception e) { e.printStackTrace(); } finally { if (httpConnection != null) httpConnection.disconnect(); } return isHttpOk; } 

Jetzt auf einem meiner Testgeräte (Droid), wenn es ein Problem gibt, bekomme ich die Ausnahme aber nur nach 6 Minuten und 36 Sekunden , nicht 5 Sekunden, wie ich in den Code oben eingestellt habe.

Die Timeout-Ausnahme wird für den getResponseCode() geworfen.

Warum?

Was vermisse ich?

  • Lokale iOS-Android-Zeroconf-Ad-hoc-Netzwerke
  • Verbinden mit IIS Express mit Android Emulator
  • Wie kann man HTTPS-Anrufe mit AsyncHttpClient machen?
  • Android NDK Netzwerkprobleme: TCP-Verbindung schlägt fehl
  • Beispiel: Android-bidirektionale Netzwerk-Socket mit AsyncTask
  • Wie kann ich mit einem Android-Gerät über SSH kommunizieren?
  • Einheit testen eine Netzwerkantwort. Funktioniert beim Debuggen, nicht beim Ausführen
  • Android: Wie kann man überprüfen, ob der Server verfügbar ist?
  • 2 Solutions collect form web for “Warum würde URLConnection Timeout nach 6+ Minuten statt 5 Sekunden?”

    Meine beste Vermutung ist, dass die URL, die Sie verbinden, Amazon in diesem Fall hat mehrere IP-Adressen.

    Nach der Warnung in der Dokumentation :

    Wenn der Hostname auf mehrere IP-Adressen auflöst, versucht dieser Client jede in RFC 3484 Reihenfolge. Wenn die Verbindung zu jeder dieser Adressen fehlschlägt, vergehen mehrere Zeitlimits, bevor der Verbindungsversuch eine Ausnahme auslöst. Hostnamen, die sowohl IPv6 als auch IPv4 unterstützen, haben immer mindestens 2 IP-Adressen.


    Bearbeiten:
    Ich erforsche das immer noch, weil ich meine Apps von HTTPClient in URLConnection HTTPClient URLConnection . Ich bin nicht zufrieden mit, in Ihrem Fall, ein 6 + Minuten Timeout.

    Ich stolperte auch über diesen Blog . Er schlägt vor, connection.setReadTimeout(READ_TIMEOUT_MILLISECONDS); Auch, weiß nicht, ob das deinem Fall helfen wird.

    Dieser König von Code ist nicht sehr nützlich, um Verbindung zu testen. Gründe für eine schlechte Verbindung sind zahlreich (jede Schicht des IP-Stapels kann ein Problem haben). Ein Beispiel: Sie können eine Verbindung haben und ein Byte pro Sekunde erhalten, kein Timeout, aber nicht sehr lustig für den Benutzer … und wenn Sie "www.amazon.com" als Test verwenden, können sie einen Witz zu Ihnen spielen (i Ich tue das selbst, D)

    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.