2012-12-09 29 views
0

後,我得到了RMI一個問題:RMI在本地網絡與NotBoundException-異常調用 「查找」

我的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註冊表-server看起來像這樣:

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

註冊表-列表[字符串[] 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) 

是否有任何人知道如何解決這個問題? :) THX

回答

2

嘗試改變

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

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

謝謝你的回答:我將「rmi://192.168.1.37:1099/Master」替換爲「Master」。現在我得到了另一個異常:java.rmi.ConnectException:連接拒絕主機:127.0.1.1;嵌套的異常是:.. – Paket2001

+0

可以告訴我什麼嵌套的異常你得到? –

+0

哦,我很抱歉尋找一個正確的方式來發布該異常(s):java.rmi.ConnectException:連接拒絕主機:127.0.1.1;嵌套的異常是: \t java.net.ConnectException:Verbindungsaufbau abgelehnt \t在sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:619) \t在sun.rmi.transport.tcp.TCPChannel.createConnection( TCPChannel.java:216) \t在sun.rmi.transport.tcp.TCPChannel.newConnection(TCPChannel.java:202) \t在sun.rmi.server.UnicastRef.invoke(UnicastRef.java:128) – Paket2001

0

服務器不知道自己的IP。所以你必須通過告訴他你的服務器的ip來啓動它。

我使用Eclipse的插件:genady

所以在Eclipse中的服務器上:點擊 「運行配置...」 - > 「RMI VM屬性」,並補充說,IP爲「java.rmi.server中.hostname」

和:

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

這就是所有。 Thx爲您提供幫助:)

+0

更正。 *您的*服務器配置錯誤,因此在構建RMI存根時默認不使用*其公共* IP地址。 – EJP