0

Spring 3.0 で作成された RMI クライアント/サーバー構成があります。

クライアントとサーバーが同じマシンで次の URL で実行されている場合:

  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 に答える