簡體   English   中英

RMI表中沒有此類對象,服務器通信錯誤

[英]RMI no such object in table, Server communication error

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

我的問題是我無法正確使用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();
        }
}

這是我的主班(上)

這是服務器類(下)

公共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)表中的此類對象在sun.rmi.transport.StreamRemoteCall上沒有.executeCall(StreamRemoteCall.java:233)在sun.rmi.server.UnicastRef.invoke(UnicastRef.java:359)在sun.rmi.registry.RegistryImpl_Stub.lookup(未知源)在Main.main(Main.java:62) )

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

可能是因為您對服務器類中的存根的引用是try塊的本地引用,並且此引用在此之后立即被垃圾回收。 嘗試將stuff變成類變量。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM