繁体   English   中英

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

[英]Android: Using resolved IP Address instead of hostname

我想使用已解析的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地址替换域名),我就能成功连接。

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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM