0

我有一个使用 Spring 3.0 创建的 RMI 客户端/服务器配置。

当客户端和服务器在同一台机器上运行时:

  rmi://localhost:1099/myService

一切都好。当我在另一台机器上运行客户端时(服务器现在在 192.168.1.67 上运行)并且客户端“指向”:

  rmi://192.168.1.67:1099/myService 

我可以从客户端看到此错误消息:

  org.spring...RmiClientInterceptor handlerRemoteConnectFailure. 
  Could not connect to Rmi Service [rmi://192.1681.67:1099/myService]

服务器是这样配置的:

    <bean id="myService" class="org.springframework.remoting.rmi.RmiServiceExporter">
       <property name="service" ref="myService"/>
       <property name="serviceInterface" value="org.myapp.MyService"/>
       <property name="serviceName" value="myService"/>
       <property name="alwaysCreateRegistry" value="true"/>
    </bean>

    <bean id="myService" class="org.myapp.MyServiceImpl" />

和客户:

    RmiProxyFactoryBean rpfb = new RmiProxyFactoryBean();
    rpfb.setServiceInterface(MyService.class);
    rpfb.setLookupStubOnStartup(true);
    rpfb.setRefreshStubOnConnectFailure(true);
    RMICustomClientSocketFactory socketFactory = new RMICustomClientSocketFactory();
    socketFactory.setTimeout(5000);
    rpfb.setRegistryClientSocketFactory(socketFactory);
    rpfb.setServiceUrl(getRmiUrl(address, port));
    rpfb.afterPropertiesSet();

我用嗅探器检查了服务器的 1099 端口,当客户端启动它的进程时,我可以看到一些数据在服务器端“发送”:

 JRMI..K
 ...192.168.1.65..
 ..192.168.1.65....
 P....w"..........................D.M...;.t..myService
 Q....w.....e...7B+@5..s}.....5org.springframework.remoting.rmi.RmiInvocationHandlerpxr..java.lang.reflect.Proxy.'. ..C....L..ht.%Ljava/lang/reflect/InvocationHandler;pxpsr.-java.rmi.server.RemoteObjectInvocationHandler...........pxr..java.rmi.server.RemoteObject.a...a3....pxpw2.
 UnicastRef..127.0.1.1..../.T~.X.....e...7B+@5...x
 R
 S
 T...e...7B+@5..

我的问题是:为什么如果客户端和服务器在同一台机器上运行,一切都很好,但在不同的机器上我会遇到这个问题?以及如何解决?

4

1 回答 1

0

我在windows上运行服务器,在linux(ubuntu)上运行客户端,一切正常。当我在 linux 上运行服务器并在 windows 上运行客户端时,我遇到了问题。

要在 linux 上修复它,只需使用以下命令运行服务器:-Djava.rmi.server.hostname=192.168.1.67.

于 2012-05-13T15:44:20.040 回答