Pergunta

Eu gostaria de usar o endereço IP resolvido para me conectar ao servidor em vez do nome do host.Aqui estão meus snippets de código:

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

Aqui, consigo obter o ENDEREÇO IP com êxito.Agora tento substituir meu url conforme abaixo:

url = url.replace(domainName, resolvedIP);

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


conn = (HttpURLConnection) url.openConnection();

conn.getInputStream(); //Throws IO Exception

Consigo me conectar com êxito se usar o URL como está (sem substituir o nome do domínio pelo endereço IP).

Informe se estou fazendo as coisas corretamente.

Foi útil?

Solução

Como regra geral, tente usar o URL baseado no nome do host.Não é incomum ter vários sites no mesmo IP, distinguindo-se apenas pelo nome do site (denominado hospedagem virtual).O que você está fazendo só funcionará no caso de haver um único site em um determinado IP.

É bastante comum que os balanceadores de carga tenham um IP para cada "site" que ele equilibra, mas ainda não há garantia de que você se conectará ao mesmo back-end por duas solicitações consecutivas.No entanto, existem balanceadores de carga da web que estendem o uso de hospedagem virtual até a camada de balanceamento de carga.

Eu simplesmente tentaria manter o download por um URL baseado no nome do host.

Outras dicas

Uma solução para contornar o problema do VHost é usar seu próprio servidor DNS e sempre retornar o mesmo endereço IP para o host ao qual você está se conectando.

Isso não requer alterações em seu aplicativo.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top