2010-04-17 47 views
0

我的目標是創建一個同時啓動服務器和客戶端的分佈式計算程序。我需要它能夠安裝在幾臺機器上,讓所有機器都可以通過一個應用程序相互通信,即主節點和5個從節點。RMI在表中沒有這樣的對象,服務器通信錯誤

我的問題是,我不能正確使用unicastRef,我在考慮在同一個端口上啓動一切時出現問題,有沒有更好的方法可以忽略?

這是我的代碼的一部分(即重要的部分)

嘗試{

 RMIServer obj = new RMIServer(); 
     obj.start(5225); 

    } catch (Exception e) { 
     e.printStackTrace(); 

    } 


     try { 
      System.out.println("We are slave's "); 
      Registry rr = LocateRegistry.getRegistry("127.0.0.1", Store.PORT, new RClient()); 

      Call ss = (Call) rr.lookup("FILLER"); 

      System.out.println(ss.getHello()); 

     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
} 

這是我的主類(以上)

這是服務器級(下同)

public RMIServer(){ }

public void start(int port) throws Exception { 

     try { 

      Registry registry = LocateRegistry.createRegistry(port, new RClient(), new RServer()); 

      Call stuff = new Call(); 

      registry.bind("FILLER", stuff); 

      System.out.println("Server ready"); 
     } catch (Exception e) { 
      System.err.println("Server exception: " + e.toString()); 
      e.printStackTrace(); 
     } 
    } 

我不知道我失蹤或我忽略了什麼,但輸出看起來像這樣。

偵聽5225 偵聽8776 服務器準備 我們是奴隸的 偵聽8776 java.rmi.NoSuchObjectException:沒有這樣的對象表 在sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(StreamRemoteCall.java: 255) at sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java:233) at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:359) at sun.rmi.registry.RegistryImpl_Stub.lookup(未知來源) at Main.main(Main.java:62)

line 62 is this ::: Call ss =(Call)rr.lookup(「FILLER」);

+0

查看http://stackoverflow.com/questions/645208 – 2010-05-19 14:19:23

回答

1

也許這是因爲您對服務器類中存根的引用對於try塊是本地的,並且引用立即被垃圾回收。嘗試將stuff改爲類變量。

相關問題