我有这个奇怪的错误。
在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)
答案 0 :(得分:1)
我也有这个问题。我在Ubuntu64上安装了许多java程序,但它们都不能解析域名(也有多个JRE - 其中一些是IBM产品)。如果我将域名放在具有IP地址的hosts文件中,则它仅适用于这些域。每个其他非Java程序与域解析一起工作得很好。奇怪的! 如果我找到答案,我会在这里发布。如果您有答案,请帮助我们!
答案 1 :(得分:1)
Java似乎不尊重系统上指定的DNS查找的顺序。例如,在/etc/nsswitch.conf
的我的Solaris系统中,我定义了:
hosts:files nis dns
Java首先要转到dns
,我不明白。通过设置sun.net.spi.nameservice.provider.n
属性,似乎可以更改排序。
我发现的一个解决方法是追加'。'在主机名的末尾。例如,如果在/ etc / hosts中,我有
192.168.1.1 mailhost
在我的java应用程序中,我会指定InetAddress.getAllByName("mailhost.")
。
答案 2 :(得分:1)
设置系统属性
sun.net.spi.nameservice.provider.1 = DNS,太阳
在Ubuntu上为我解决了这个问题
答案 3 :(得分:0)
检查是否需要使用代理,如果是,请在命令行中指定其详细信息
http://helpdesk.objects.com.au/java/how-to-tell-a-java-application-to-use-a-proxy-server
答案 4 :(得分:0)
您必须签入/ etc / services文件。
我遇到了同样的错误,那是因为服务:
domain ..........
被评论道。