2011-04-14 90 views
10

我在代码中使用RMI:java.net.ConnectException:连接超时:connect?

import java.rmi.*; 

public interface AddServerIntf extends Remote { 
    double add(double d1,double d2) throws RemoteException; 
} 

import java.rmi.*; 
import java.rmi.server.*; 

public class AddServerImpl extends UnicastRemoteObject implements AddServerIntf { 
    public AddServerImpl() throws RemoteException { 
    } 

public double add(double d1,double d2) throws RemoteException { 
    return d1+d2; 
} 
} 

import java.net.*; 
import java.rmi.*; 

public class AddServer { 
    public static void main(String args[]) { 
    try { 
    AddServerImpl addServerImpl=new AddServerImpl(); 
    Naming.rebind("AddServer",addServerImpl); 
    } catch(Exception exc) { 
      System.out.println(exc); 
     } 
    } 
} 

import java.rmi.*; 
public class AddClient { 
    public static void main(String args[]) { 
    try { 
     String Url="rmi://"+args[0]+"/AddServer"; 
     AddServerIntf addServerIntf=(AddServerIntf)Naming.lookup(Url); 
     System.out.println("The first number is "+args[1]); 
     double d1=Double.valueOf(args[1]).doubleValue(); 
     System.out.println("The second number is: "+args[2]); 
     double d2=Double.valueOf(args[2]).doubleValue(); 
     System.out.println("The Sum is: "+addServerIntf.add(d1,d2)); 
    } catch(Exception exc) { 
     System.out.println(exc); 
     } 
    } 
} 

这些是用4个.java文件。

接下来我编译所有这些files.Then我创建一个stub使用rmic AddServerImpl。之后,我使用start rmiregistry在服务器端启动rmi注册表。然后我开始使用java AddServer服务器,最后客户端使用java AddClient 27.60.200.80 5 9但没有任何反应

例外是在客户端抛出是java.net.ConnectException : connection timed out : connect

的原因是什么?如何解决这个问题?

在客户端机器,这些有以下几种.class文件AddClient.class AddServerImpl.class AddServerImpl_Stub.class和服务器端AddServer.class AddServerImpl.class AddServerImpl_Stub.class AddServerIntf.class

+0

邮政堆栈跟踪的异常,如果有的话 – 2011-04-14 11:38:37

+0

最简单的解释:你服务器的IP地址不是你认为的那样 – Anon 2011-04-14 11:41:07

+0

@Anon你怎么这么说? – saplingPro 2011-04-14 11:52:31

回答

29

错误消息说,这一切:你的连接超时。这意味着您的请求在某个(默认)时间范围内没有得到回复。没有响应被接收的原因很可能是以下之一:

  • 一)IP /域或端口不正确
  • b)中的IP /域或端口(即服务)是向下
  • c)IP /域所用的时间超过默认超时时间
  • d)您的防火墙阻止了您使用的任何端口上的请求或响应
  • e)您的防火墙阻止了那个特定的主机
  • f)Yo乌尔上网下跌

注意,防火墙和端口或IP阻止可能由您的ISP到位

+0

@理查德这些我没有看到任何理由。 – saplingPro 2011-04-14 12:26:26

+2

@Meprog - 尽管你没有看到任何理由,但他们是你应该调查和测试的东西,因为它们是连接超时的最可能原因。您还应该接受其他人的建议,并使用完整的堆栈跟踪编辑您的帖子。 – Anon 2011-04-14 12:29:52

+1

(a)不是(b)是正确的。两者都会产生'连接被拒绝'。 – EJP 2015-10-27 09:14:33

0

数(1):该IP是不正确的 - 是正确的答案。/etc/hosts文件(又名: C:\ Windows \ system32 \ drivers \ etc \ hosts)对本地计算机名称有不正确的条目。 更正了'主机'文件,骆驼运行得非常好。感谢指针。

+0

花了我几天的时间来找到这个,它解决了我使用ehcache多播时遇到的一个问题...... isp在机器的/ etc/hosts文件中有错误的IP设置。伟大的见解! – 2012-05-23 18:49:46

+0

数目(1)是什么? – EJP 2015-10-27 09:14:53

0

如果你在一个域(如fabrikam.com)指向的配置,做一个nslookup来确保所有的响应IP地址是有效的,并且可以连接到端口389:

NSLOOKUP fabrikam.com 

Test-NetConnection <IP returned from NSLOOKUP> -port 389 
相关问题