Domanda

Vorrei utilizzare l'indirizzo IP risolto per connettermi al server invece del nome host.Ecco i miei frammenti di codice:

     // 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(); 

Qui posso ottenere con successo l'INDIRIZZO IP.Ora provo a sostituire il mio URL come di seguito:

url = url.replace(domainName, resolvedIP);

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


conn = (HttpURLConnection) url.openConnection();

conn.getInputStream(); //Throws IO Exception

Sono in grado di connettermi con successo se utilizzo l'URL così com'è (senza sostituire il nome di dominio con l'indirizzo IP).

Fammi sapere se sto facendo le cose correttamente.

È stato utile?

Soluzione

Come regola generale, prova a utilizzare l'URL basato sul nome host.Non è raro avere più siti web sullo stesso IP, contraddistinti solo dal nome del sito (cosiddetto hosting virtuale).Quello che stai facendo funzionerà solo nel caso in cui ci sia un singolo sito su un dato IP.

È abbastanza comune per i bilanciatori del carico avere un IP per ogni "sito" che bilancia, ma non c'è ancora alcuna garanzia che ti connetterai allo stesso backend per due richieste consecutive.Tuttavia, esistono web load balancer che estendono l'uso dell'hosting virtuale fino al livello di bilanciamento del carico.

Proverei semplicemente a mantenere il download tramite un URL basato sul nome host.

Altri suggerimenti

Una soluzione per aggirare il problema di VHost è utilizzare il tuo server DNS e restituire sempre lo stesso indirizzo IP per l'host a cui ti stai connettendo.

Ciò non richiede modifiche alla tua applicazione.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top