我想使用已解析的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地址替换域名)。
如果我正确地做事,请告诉我。
答案 0 :(得分:2)
作为一般规则,请尝试使用基于主机名的URL。在同一IP上拥有多个网站并不罕见,仅通过网站名称(所谓的虚拟主机)进行区分。您所做的只适用于给定IP上有单个站点的情况。
负载均衡器为每个“站点”平衡一个IP是很常见的,但是仍然无法保证连接两个连续请求会连接到同一个后端。但是,有一些Web负载平衡器可以将虚拟主机的使用一直扩展到负载平衡层。
我只想尝试通过基于主机名的URL进行下载。
答案 1 :(得分:0)
解决VHost问题的一个解决方案是使用您自己的DNS服务器,并始终为您要连接的主机返回相同的IP地址。
这不需要更改您的应用程序。