Frage

Ich möchte anstelle des Hostnamens eine aufgelöste IP-Adresse verwenden, um eine Verbindung zum Server herzustellen.Hier sind meine Codefragmente:

     // Get domain name from URL
    String domainName = url.substring("http://".length(),
            url.indexOf("/", 8));
    // Get IP address as string
    InetAddress inet = null;
    try {
        inet = InetAddress.getByName(domainName);
    } catch (UnknownHostException e) {
        Log.i(TAG, "The IP address cannot be resolved for " + domainName);
    }
        resolvedIP = inet.getHostAddress(); 

Hier kann ich erfolgreich eine IP-Adresse erhalten.Jetzt versuche ich meine URL wie folgt zu ersetzen:

url = url.replace(domainName, resolvedIP);

Now I connect to server:
URL download = new URL(url);


conn = (HttpURLConnection) url.openConnection();

conn.getInputStream(); //Throws IO Exception

Ich kann erfolgreich eine Verbindung herstellen, wenn ich die URL unverändert verwende (ohne den Domainnamen durch die IP-Adresse zu ersetzen).

Bitte lassen Sie mich wissen, ob ich die Dinge richtig mache.

War es hilfreich?

Lösung

Versuchen Sie in der Regel, die auf dem Hostnamen basierende URL zu verwenden.Es ist nicht ungewöhnlich, dass mehrere Websites dieselbe IP-Adresse haben, die sich nur durch den Site-Namen unterscheidet (sogenanntes virtuelles Hosting).Was Sie tun, funktioniert nur in dem Fall, in dem sich eine einzelne Site auf einer bestimmten IP befindet.

Es ist durchaus üblich, dass Load-Balancer für jede "Site", die sie ausgleichen, eine IP haben. Es gibt jedoch noch keine Garantie dafür, dass Sie bei zwei aufeinander folgenden Anforderungen eine Verbindung zum selben Backend herstellen.Es gibt jedoch Web-Load-Balancer, die die Verwendung von virtuellem Hosting bis zur Load-Balancing-Schicht erweitern.

Ich würde einfach versuchen, das Herunterladen über eine auf dem Hostnamen basierende URL beizubehalten.

Andere Tipps

Eine Lösung, um das VHost-Problem zu umgehen, besteht darin, einen eigenen DNS-Server zu verwenden und immer dieselbe IP-Adresse für den Host zurückzugeben, zu dem Sie eine Verbindung herstellen.

Dies erfordert keine Änderung an Ihrer Anwendung.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top