Java RMI 注册表找不到服务器对象

标签 java server rmi rmiregistry

所以,问题是我有一些服务器代码,允许客户端使用 rmiregistry 调用其上的函数。应该注意的是,我在 OS X 终端上运行这些命令,并且我正在处理两个文件夹:

RMI - 它将调用 rmiregistry 并 Server - 其中包含我所有的服务器代码

因此,我打开一个终端并输入:

rmiregistry -J-Djava.rmi.server.codebase=file:/Desktop/RMI/Server/ &

一切都很好,我得到了一个端口。 然后,我登录到包含服务器代码的服务器文件夹来运行我的 calculatorserver 程序。 现在我被告知指定代码库和安全策略:

java -Djava.rmi.server.codebase=file:/Desktop/RMI/Server/ -Djava.security.policy=server.policy calculatorserver 

但是,我不断收到同样的错误:

Server Error: java.rmi.ServerException: RemoteException occurred in server thread; nested exception is: 
    java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is: 
    java.lang.ClassNotFoundException: calculator

我知道收到此错误的唯一原因是 rmiregistry 找不到服务器对象。

一些指导将不胜感激

最佳答案

这不是真正的 HTTP URL。它是一个前面带有 http: 的目录名称。您需要将真实的 http: URL 与真实的 HTTP 服务器一起使用。或FTP。

您可以使用 file: URL,但是您或多或少会陷入单个主机中,在这种情况下,您实际上根本不需要代码库功能。如果您确实使用 file: URL,则注册表和客户端必须能够理解它,这又意味着它们要么都位于同一主机中,要么命名为注册表所指定的共享目录。客户可以看到。

注意不要向注册表(或客户端,除非它导出远程(回调)对象)指定代码库:仅向服务器 JVM 指定代码库

关于Java RMI 注册表找不到服务器对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33025337/

相关文章:

java - 最后出现在 1 之后的数字 '0' 在从十进制数转换时会丢失在二进制数中

java - 是否可以在 Eclipse 中将部分 java 代码标记为不自动格式化?

PHP 文件未按预期执行

java - 客户端之间无法通信

java - 更新时从服务器到客户端的 RMI 通知

java - Spring 模块中的 CacheSecond

java - 比 O(n) 更好的范围相交算法?

Symfony 不加载页面

java RMI - 服务器自动调用远程方法

java - 启动并运行 Java RMI