我成功创建了 RMI 服务和客户端。我可以调用方法等等。但现在我想尝试以下方法:我希望在服务上托管一个标准的 Java 对象,如 LinkedList。此外,我想“假装”我已经拥有使用 LinkedList 的现有代码。我想要的是获得一个实际上由服务管理的 LinkedList,但我可以像普通的 LinkedList 一样在本地访问它。最重要的是,我想做一些最小的日志记录,比如如果 .add() 被调用,它会在服务器上写入:“添加调用”。
这不是为了生产,只是为了帮助我理解它是如何工作的!
到目前为止,我已经尝试了很多东西。最有希望的是我创建了一个扩展 LinkedList 并实现 Remote 的类。此类尝试在构造函数中向 Registry 注册自己,如下所示:
try {
UnicastRemoteObject.exportObject((Remote)this);
Naming.rebind("theList", (Remote)this);
}
catch (Exception e) {
System.out.println("fail");
System.out.println(e.getMessage());
}
我必须这样做,因为我需要扩展 LinkedList,因此我无法扩展 UnicastRemoteObject。
当我尝试在服务器端运行它时得到的输出:
失败 连接拒绝主机:192.168.178.27;嵌套异常是: java.net.ConnectException:连接被拒绝
在客户端:
java.lang.ClassCastException:MyList_Stub 无法转换为 java.util.LinkedList 在 $Proxy0.createList(未知来源) 在 RemoteProgram.main(RemoteProgram.java:27)
提前致谢!