私の目標は、サーバーとクライアントを同時に起動する分散コンピューティング プログラムを作成することです。いくつかのマシンにインストールして、すべてのマシンが相互に通信できるようにする必要があります。つまり、マスター ノードと 5 つのスレーブ ノードがすべて 1 つのアプリケーションから通信できるようにする必要があります。
私の問題は、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: そのようなオブジェクトはありません.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");