一千萬個為什麽

搜索

RMI表中沒有這樣的對象,服務器通信錯誤

我的目標是創建一個分布式計算程序,同時啟動服務器和客戶端。我需要它能夠安裝在幾臺機器上並讓所有機器相互通信,即主節點和5個從節點都來自一個應用程序。

我的問題是我無法正常使用unicastRef,我認為在同一個端口上啟動所有內容是一個問題,我有更好的方法可以忽略嗎?

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

嘗試{

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

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

    }


      嘗試{
            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 {

        嘗試{

            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:表中沒有這樣的對象         at 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(Unknown Source)         在Main.main(Main.java:62)

第62行是:::調用ss =(調用)rr.lookup(“FILLER”);

最佳答案

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

轉載註明原文: RMI表中沒有這樣的對象,服務器通信錯誤