Android:使用已解析的IP地址而不是主机名

时间:2011-06-17 07:37:54

标签: java android http networking resolveurl

我想使用已解析的IP地址连接到服务器而不是主机名。这是我的代码片段:

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

在这里,我能够成功获得IP ADDRESS。现在我尝试更换我的网址如下:

url = url.replace(domainName, resolvedIP);

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


conn = (HttpURLConnection) url.openConnection();

conn.getInputStream(); //Throws IO Exception

如果我按原样使用URL,我就能成功连接(不用IP地址替换域名)。

如果我正确地做事,请告诉我。

2 个答案:

答案 0 :(得分:2)

作为一般规则,请尝试使用基于主机名的URL。在同一IP上拥有多个网站并不罕见,仅通过网站名称(所谓的虚拟主机)进行区分。您所做的只适用于给定IP上有单个站点的情况。

负载均衡器为每个“站点”平衡一个IP是很常见的,但是仍然无法保证连接两个连续请求会连接到同一个后端。但是,有一些Web负载平衡器可以将虚拟主机的使用一直扩展到负载平衡层。

我只想尝试通过基于主机名的URL进行下载。

答案 1 :(得分:0)

解决VHost问题的一个解决方案是使用您自己的DNS服务器,并始​​终为您要连接的主机返回相同的IP地址。

这不需要更改您的应用程序。