基于多个DNS结果的Java传出TCP连接故障转移

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

没有! 通过新的Socket(String,int)创建套接字会导致类似的解析

 addr = InetAddress.getByName(hostname); 

这是一个捷径

 return InetAddress.getAllByName(host)[0]; 

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

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

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