【发布时间】:2010-04-17 15:15:51
【问题描述】:
我的目标是创建一个同时启动服务器和客户端的分布式计算程序。我需要它能够安装在几台机器上并让所有机器相互通信,即主节点和 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");
【问题讨论】:
标签: java networking rmi distributed-computing