如果我使用 new Socket("unit.domain.com", 100)
建立连接并且 unit.domain.com
DNS 记录在A记录..在连接失败的情况下,Java是否像浏览器一样自动连接到列表中的其他地址之一?还是必须手动实现?
最佳答案
不! 通过 new Socket(String, int) 创建套接字会导致这样的解析
addr = InetAddress.getByName(hostname);
这是
的快捷方式return InetAddress.getAllByName(host)[0];
地址解析在Socket c-tor中进行。
如果您必须重新连接(故障转移),请使用 InetAddress.getAllByName(host) 返回的结果,随机化(或使用循环法)并连接到必要的地址。
编辑:另外,如果您需要连接一些可能出现的故障,最好使用带有超时的 Socket 类的连接方法。 另外确保关闭甚至失败的套接字(尤其是 channel ),因为它们可能会在 *Nix 上泄漏 FD。
关于基于多个 DNS 结果的 Java 传出 TCP 连接故障转移,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4648803/