4

如果我使用new Socket("unit.domain.com", 100)unit.domain.comDNS 记录在 A 记录中有多个 IP 地址进行连接。如果连接失败,Java 是否会像浏览器一样自动连接到列表中的其他地址之一?还是必须手动实施?

4

1 回答 1

5

不!通过 new Socket(String, int) 创建一个套接字会导致这样的解析

addr = InetAddress.getByName(hostname);

这是一个快捷方式

return InetAddress.getAllByName(host)[0];

地址解析在 Socket c-tor 中执行。

如果您必须重新连接(故障转移),请使用 InetAddress.getAllByName(host) 返回的结果,随机化(或使用循环)并连接到必要的地址。

编辑:另外,如果您需要连接一些可能的故障,最好使用带有超时的 Socket 类的连接方法。还要确保关闭失败的套接字(尤其是通道),因为它们可能会在 *Nix 上泄漏 FD。

于 2011-01-10T18:39:20.640 回答