我正在尝试提供一个程序,将计算机从A发送到计算机B。两台计算机都必须有我的java程序的副本。这需要在JTextField对象中输入远程计算机B的名称,在JTextArea对象中输入消息,然后单击按钮发送。
我的程序应该能够将给定的计算机名解析为ip地址,以便将IP地址作为参数包含在我的DatagramPacket构造函数中。
我尝试使用以下方法进行解析,但我得到javax.naming.CommunicationException。
String clientname="user";
Hashtable env=new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.dns.DnsContextFactory");
env.put(Context.PROVIDER_URL,"dns://www.google.com");
DirContext con=new InitialDirContext(env);
Object obj=con.lookup("clientname");
抛出异常
javax.naming.CommunicationException: DNS error [Root exception is java.net.SocketTimeoutException: Receive timed out]; remaining name 'user'
at com.sun.jndi.dns.DnsClient.query(DnsClient.java:300)
at com.sun.jndi.dns.Resolver.query(Resolver.java:81)
at com.sun.jndi.dns.DnsContext.c_lookup(DnsContext.java:286)
at com.sun.jndi.toolkit.ctx.ComponentContext.p_lookup(ComponentContext.java:544)
at com.sun.jndi.toolkit.ctx.PartialCompositeContext.lookup(PartialCompositeContext.java:177)
at com.sun.jndi.toolkit.ctx.PartialCompositeContext.lookup(PartialCompositeContext.java:166)
at javax.naming.InitialContext.lookup(InitialContext.java:411)
Caused by: java.net.SocketTimeoutException: Receive timed out
at java.net.DualStackPlainDatagramSocketImpl.socketReceiveOrPeekData(Native Method)
at java.net.DualStackPlainDatagramSocketImpl.receive0(DualStackPlainDatagramSocketImpl.java:121)
at java.net.AbstractPlainDatagramSocketImpl.receive(AbstractPlainDatagramSocketImpl.java:145)
at java.net.DatagramSocket.receive(DatagramSocket.java:786)
at com.sun.jndi.dns.DnsClient.doUdpQuery(DnsClient.java:411)
at com.sun.jndi.dns.DnsClient.query(DnsClient.java:203)
... 7 more
问题
我怎样才能实现我的目标因为在我看来,java DNS服务提供商似乎只能解析域名而不是个人计算机名称?我一直在努力奋斗3天。
感谢任何帮助。