【发布时间】:2010-11-01 08:22:45
【问题描述】:
我遇到了这个奇怪的错误。
在 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)
【问题讨论】:
-
会不会是被缓存咬了? (java.sun.com/javase/6/docs/technotes/guides/net/properties.html) JVM 是否在后续尝试后重新启动?
-
差不多,我是用 java Test myhost 80 从命令行运行的
-
将 networkaddress.cache.ttl 和 networkaddress.cache.negative.ttl 都设置为 1,然后重试。 networkaddress.cache.ttl 默认为 -1,表示“永远缓存”。
-
我一直被 .ttl 设置所困扰 - 为什么 Sun 将默认设置为无穷大,这超出了我的理解。不过,如果他们从命令行运行测试,那似乎不是 OP 的问题。