0

我想使用解析的 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 地址。现在我尝试替换我的网址,如下所示:

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 地址替换域名),我能够成功连接。

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

4

2 回答 2

2

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

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

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

于 2011-06-17T11:07:36.433 回答
0

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

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

于 2011-06-17T11:14:45.727 回答