`

调用远程主机上的RMI服务时抛出java.rmi.ConnectException: Connection refused to host: 127.0.0.1

    博客分类:
  • RMI
阅读更多

写一个rmi客户端程序,你可能会收到如标题这样的异常。这个问题其实是由rmi服务器端程序造成的。

客户端程序向服务端请求一个对象的时候,返回的stub对象里面包含了服务器的hostname,客户端的后续操作根据这个hostname来连接服务器端。要想知道这个hostname具体是什么值可以在服务器端bash中打入指令:
hostname -i

如果返回的是127.0.0.1,那么你的客户端肯定会抛如标题的异常了。

解决这个问题有两个方式:
1 修改/etc/hosts
找到127.0.0.1       hostxxxxx这样的字样。把127.0.0.1改成真实的,可供其他机器连接的ip。

这样客户端就能得到真实的ip了。

2 在rmi服务器端程序启动脚本中加上两行,显式指定hostname。我的脚本:
hostname=`hostname`

java -cp $CLASSPATH -Djava.rmi.server.codebase=$codebase -Djava.security.policy=$PROJECT_HOME/se_server/conf/se_server.policy -Djava.rmi.server.hostname=$hostname com.abc.server.StartServer > $PROJECT_HOME/se_server/logs/init.log 2>&1 &

不过该方式有个局限,其他机器肯定能识别ip,但是可能无法识别hostname。

当然,你也可以直接写死这个hostname,比如:-Djava.rmi.server.hostname=xxx.xxx.xxx.xxx。 这样最省力,就是少点灵活性.

 

网上的基本都是上面的方案,1写的不太清楚。

3. /etc/hosts修改:

假如你的机器是nlpserver,IP是10.200.7.100 在/etc/hosts中添加这两条

127.0.0.1                localhost.localdomain localhost
10.200.7.100  nlpserver

,这样执行 #hostname -i  会直接显示你要绑定的IP 10.200.7.100。

这样你的RMI服务没有问题,其它应用访问localhost也没有问题。

 

 

 

 

 

 

分享到:
评论

相关推荐

    启动tomcat时 错误: 代理抛出异常 : java.rmi.server.ExportException: Port already in use: 1099的解决办法

     错误: 代理抛出异常错误: java.rmi.server.ExportException: Port already in use: 1099; nested exception is: java.net.BindException: Address already in use: JVM_Bind  这里说的是1099端口被其它进程占用...

    三种方式实现java远程调用(rmi),绝对可用

    2. **实现远程接口**:创建接口的实现类,并在该类中抛出`java.rmi.RemoteException`。 3. **注册远程对象**:通过`java.rmi.registry.Registry`将远程对象注册到RMI服务器上,以便客户端可以找到。 4. **客户端调用...

    RMI.rar_Java RMI_java.rmi_java.rmi.Remot_remote

    这些方法通常抛出`java.rmi.RemoteException`,因为网络通信中可能出现的各种问题。 2. **实现远程对象**:创建一个实现远程接口的类,实现接口中声明的方法。这些方法将被序列化并通过网络传输。 3. **注册远程...

    java 远程方法调用(java rmi)

    这些方法必须声明为`remote`,并且可能会抛出`java.rmi.RemoteException`。 2. 远程实现(Remote Implementation):实现了远程接口的具体类,它提供了远程方法的实际实现。 3. 注册表(Registry):RMI系统中的一个...

    RMI远程调用代码及使用方法

    4. **客户端调用**: 客户端通过`java.rmi.Naming`查找远程服务,并进行远程调用。 #### 三、RMI远程调用示例分析 ##### 1. 接口定义 ```java import java.rmi.Remote; import java.rmi.RemoteException; public ...

    RMI远程调用DEMO....

    这是因为RMI会将远程抛出的异常封装为java.rmi.RemoteException,并在客户端重新抛出。 8. 安全性:RMI提供了安全机制,可以通过设置权限控制来限制对远程对象的访问。默认情况下,RMI使用Java的安全模型,允许管理...

    java_rmi.rar_RMI java_java.rmi

    2. **实现远程接口**:然后,创建一个实现远程接口的类,该类通常需要继承自`java.rmi.Remote`接口,并且抛出`java.rmi.RemoteException`。在这个实现类中,你需要实现远程接口中的所有方法。 3. **创建并注册远程...

    JMeter分布式原理,远程启动配置,jmeter在Linux上分布式压测环境搭建配置,命令行运行+问题集合,修改jvm值

    5 Server failed to start: java.rmi.RemoteException: Cannot start. localhost.localdomain is a loopback address.An error occurred: Cannot start. localhost.localdomain is a loopback address.

    JAVARMI远程方法调用简单实例.docx

    远程接口中的方法声明会抛出`RemoteException`,表明这些方法是可以被远程调用的。 2. **远程对象(Remote Object)**:实现了远程接口的类,通常需要继承`java.rmi.UnicastRemoteObject`。这个类负责具体实现远程...

    java API文档

    - **java.rmi.activation**:支持激活ID管理等远程服务功能。 - **java.rmi.dgc**:提供了与RMI相关的数据管理功能。 - **java.rmi.registry**:注册表服务支持。 - **java.rmi.server**:服务器端RMI支持。 - ...

    基于java的远程调用.zip

    这些方法将抛出`java.rmi.RemoteException`。 2. **实现远程接口**:然后,创建一个实现了远程接口的类,这个类是实际的远程对象。在实现类中,你需要提供远程方法的具体实现。 3. **注册远程对象**:在服务器端,...

    Java各个包简述.pdf

    31. **java.rmi.activation**:RMI对象激活支持,允许对象在需要时自动创建。 32. **java.rmi.dgc**:RMI分布式的垃圾回收支持。 33. **java.rmi.registry**:RMI注册表,用于查找和管理远程对象。 34. **java....

    JMX以RMI方式连接的场景示例

    JMX以RMI方式连接的场景示例 JMX(Java Management Extensions)是一种Java技术,用于管理和监控应用程序。JMX框架主要由三部分组成:MBean(Managed Bean)、Agent(代理)和Client(客户端)。在本场景中,我们将...

    java rmi远程方法调用 客户端

    这个接口必须继承自`java.rmi.Remote`,并且声明的所有方法都必须抛出`java.rmi.RemoteException`。 2. **远程实现(Remote Implementation)**:实现了远程接口的类,它实际上包含了远程方法的实现。这个类需要被...

    rmi.rar_Java RMI_RMI java_RMI policy.all_rmi

    6. **部署和运行**:使用RMI时,需要将远程对象导出(`java.rmi.Naming.rebind()`),然后客户端可以通过`java.rmi.Naming.lookup()`查找并调用远程对象。在实际应用中,还需要配置JVM的RMI端口和其他网络参数。 在...

    java rmi 远程方法调用 服务端

    1. 远程接口(Remote Interface):定义了可以被远程调用的方法,这些方法必须声明抛出`java.rmi.RemoteException`。接口需要使用`@Remote`注解标记。 2. 远程实现类(Remote Implementation):实现了远程接口,并...

    Java RMI 远程方法调用

    接口中的方法声明抛出java.rmi.RemoteException,这是所有RMI特定异常的超类。 2. **远程实现(Remote Implementation)**:实现了远程接口的具体类,包含了远程方法的实现。这个类需要被Java的序列化机制支持,...

    Java-远程方法调用RMI参数详解.docx

    Java 远程方法调用(Remote Method Invocation,RMI)是一种在分布式环境中调用对象方法的技术,它使得Java应用程序能够透明地调用运行在不同 JVM 上的远程对象的方法。RMI 包含了一系列的参数,这些参数对于优化...

    动态代理与RMI远程调用

    1. 定义远程接口:接口需继承`java.rmi.Remote`,并声明可能抛出`java.rmi.RemoteException`的方法。 2. 实现远程接口:在服务器端实现接口,并通过`java.rmi.server.UnicastRemoteObject`导出远程对象。 3. 注册...

Global site tag (gtag.js) - Google Analytics