我遇到了这个奇怪的错误。
在 AIX 上,我可以从命令行访问我的服务器(使用 ping / telnet)
但如果我尝试使用 java,我会得到 UnkownHostException
这是因为 Java 无法以某种方式“使用”DNS,但我不知道为什么。如果我使用 IP 地址,它就可以正常工作。
这是我的测试程序。
import java.net.*;
public class Test {
public static void main( String [] args ) throws Exception {
String host = args[0];
int port = Integer.parseInt( args[1] );
System.out.println("Connecting to: " + host + " at port: " + port );
Socket socket = new Socket( host, port );
System.out.println("Connected!");
socket.close();
System.out.println("Closed!");
}
}
是否有人知道 AIX 下某种禁止程序(如 java)访问 DNS 信息的配置?
我(以及 sysadm)已在 /etc/hosts 中添加了我的地址,但它也不起作用。
提前致谢
Java 版本:
Java(TM) 2 Runtime Environment, Standard Edition (build pap32dev-20080315 (SR7))
IBM J9 VM (build 2.3, J2RE 1.5.0 IBM J9 2.3 AIX ppc-32 j9vmap3223-20080315 (JIT enabled)
答案1
IPv6 支持有问题吗?尝试设置系统属性 java.net.preferIPv4Stack=true。
看看 InetAddress.getAllByName()、InetAddress.getAllByAddress() 返回什么。
答案2
我不知道 Java 是否以不同的方式使用 DNS,但在 AIX 上,如果您要使用 /etc/hosts 文件,则应确保 /etc/netsvc.conf 设置正确。默认情况下,如果找到 /etc/resolv.conf,AIX 将使用 DNS,然后使用 hosts。要将 hosts 放在首位,请确保 /etc/netsvc.conf 中有一行内容,内容类似于 hosts=local,bind4
答案3
Java 和 AIX 确实存在一些长期的 DNS 问题,我已经有一段时间没有关注它了,但请尝试使用完全限定域名而不是短域名。
此外,如果 /etc/resolv.conf 存在,AIX 上的 Java 似乎不会使用 /etc/hosts 文件进行名称解析,天知道为什么。