0

RMI で問題が発生しました。

RMI クライアントが 192.168.1.37 のレジストリを取得しようとしています

Registry registry = LocateRegistry.getRegistry("192.168.1.37",1099);
String[] s = registry.list();
    for( String obj : s ) {
        System.out.println("  " + obj);
    }
IMaster master = (IMaster) registry.lookup ("rmi://192.168.1.37:1099/Master");

私の RMI サーバーは次のようになります。

Registry registry = LocateRegistry.getRegistry();
IMaster m = new Master(3, 3);
registry.rebind ("Master", m);
System.out.println ("Master Server is ready.");

レジストリ リスト [String[] s = registry.list();] は、「マスター」バインディングを認識します。つまり、ネットワークに問題はなく、レジストリが存在します。また、オブジェクトはすでにエクスポートされています。(私は RMI に eclipse-plugin を使用しています)。

しかし、クライアントのルックアップラインで例外が発生しました:

java.rmi.NotBoundException: rmi://192.168.1.37:1099/Master
at sun.rmi.registry.RegistryImpl.lookup(RegistryImpl.java:136)
at sun.rmi.registry.RegistryImpl_Skel.dispatch(Unknown Source)
at sun.rmi.server.UnicastServerRef.oldDispatch(UnicastServerRef.java:409)
at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:267)
at sun.rmi.transport.Transport$1.run(Transport.java:177)
at sun.rmi.transport.Transport$1.run(Transport.java:174)
at java.security.AccessController.doPrivileged(Native Method)
at sun.rmi.transport.Transport.serviceCall(Transport.java:173)
at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:553)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:808)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:667)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
at java.lang.Thread.run(Thread.java:722)
at sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(StreamRemoteCall.java:273)
at sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java:251)
at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:377)
at sun.rmi.registry.RegistryImpl_Stub.lookup(Unknown Source)
at philosoper.client.ClientServer.main(ClientServer.java:37)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at net.genady.rmi.logger.Runner.main(Runner.java:137)

誰でもこれを修正する方法を知っていますか? :) どうも

4

2 に答える 2

2

変更してみる

IMaster master = (IMaster) registry.lookup ("rmi://192.168.1.37:1099/Master");

IMaster master = (IMaster) registry.lookup ("Master");
于 2012-12-09T21:21:39.900 に答える
0

サーバーは自分の IP を知りませんでした。したがって、サーバーのIPを彼に伝えて開始する必要があります。

私はEclipseプラグインを使用しています:genady

したがって、Eclipse のサーバーでは、[Run Configurations...] -> [RMI VM Properties] をクリックし、その IP を「java.rmi.server.hostname」に追加します。

と:

IMaster master = (IMaster) registry.lookup ("Master");

それで全部です。あなたの助けのためのThx :)

于 2012-12-09T22:21:25.657 に答える