java - RMI 表中没有此类对象,服务器通信错误

标签 java networking rmi distributed-computing

我的目标是创建一个同时启动服务器和客户端的分布式计算程序。我需要它能够安装在多台机器上,并使所有机器相互通信,即主节点和 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();
        }
}

这是我的主课(上图)

这是服务器类(如下)

公共(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) 在 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");

最佳答案

也许是因为您对服务器类中 stub 的引用是 try block 本地的,并且该引用之后立即被垃圾收集。尝试将 stuff 改为类变量。

关于java - RMI 表中没有此类对象,服务器通信错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2658843/

相关文章:

Java 程序产生不正确的输出。 (while 循环)

c++ - 使用 libpcap 速度限制发送数据包

ios - 代理从我的 iPhone/iPad 到 Mac 上的 VirtualBox 的 http 和 https 流量

java - java中如何存储rmi连接?

java - 车牌厂

java - 渲染器/排序优化

python - 如何检测 Linux 上 Twisted 的非正常断开连接?

java - 如何使 RMI 服务器同时为本地客户端(同一网络内)和外部客户端工作

java - RMI 性能太慢

java - H 264编解码器中i帧的起始码是什么?