【发布时间】:2011-06-17 07:37:53
【问题描述】:
我想使用解析的 IP 地址而不是主机名连接到服务器。这是我的代码 sn-ps:
// 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 将与您尝试手动执行的操作完全相同。
-
用例是:负载均衡器后面配置了很多服务器。我尝试连接多次。我想对我出于某些分析目的首先连接的同一台服务器执行此操作。我不确定这是否可能,但从逻辑上讲它必须是可能的。我可以吗?
-
嗯,这真的取决于负载均衡器的工作方式。除非您确定它正在执行基于 DNS 的负载平衡,否则这种方法无法确保您每次都访问同一台服务器。
-
是否有任何其他方法可以确保从客户端连接到同一台服务器?我刚刚阅读了关于 Sticky 位的内容,但它是负载平衡器处理的。
-
您需要与运行/拥有负载均衡器的人交谈,以了解它是如何工作的,以及是否有任何方法可以确保您反复访问该服务器。
标签: java android http networking resolveurl