java - RMI 异常。无法连接到服务器

标签 java amazon-web-services rmi

我尝试通过 RMI 连接客户端和远程服务器,但收到此错误消息:

java.rmi.UnmarshalException: error unmarshalling return; nested exception is:
    java.net.MalformedURLException: unknown protocol: c
    at sun.rmi.registry.RegistryImpl_Stub.lookup(Unknown Source)
    at java.rmi.Naming.lookup(Unknown Source)
    at RmiClient.getMessage(RmiClient.java:11)
    at RmiClient.main(RmiClient.java:26)
Caused by: java.net.MalformedURLException: unknown protocol: c
    at java.net.URL.<init>(Unknown Source)
    at java.net.URL.<init>(Unknown Source)
    at java.net.URL.<init>(Unknown Source)
    at sun.rmi.server.LoaderHandler.pathToURLs(Unknown Source)
    at sun.rmi.server.LoaderHandler.getDefaultCodebaseURLs(Unknown Source)
    at sun.rmi.server.LoaderHandler.loadClass(Unknown Source)
    at java.rmi.server.RMIClassLoader$2.loadClass(Unknown Source)
    at java.rmi.server.RMIClassLoader.loadClass(Unknown Source)
    at sun.rmi.server.MarshalInputStream.resolveClass(Unknown Source)
    at java.io.ObjectInputStream.readNonProxyDesc(Unknown Source)
    at java.io.ObjectInputStream.readClassDesc(Unknown Source)
    at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
    at java.io.ObjectInputStream.readObject0(Unknown Source)
    at java.io.ObjectInputStream.readObject(Unknown Source)
    ... 4 more

以下可能是问题的原因:

服务器有这一行:

Naming.rebind("rmi://172.31.24.66:1099/RmiServer", obj);

指的是EC2实例的私有(private)IP地址。另一方面,客户端有这一行 - 即上面的第 11 行:

RmiServerIntf  obj = (RmiServerIntf)Naming.lookup("rmi://54.229.66.114:1099/RmiServer");

这是该实例的公共(public)IP。另外,在客户端,我将代码库属性设置为:

System.setProperty("java.rmi.server.codebase", "C:\\Users\\spacitron\\Projects\\RMIClient\\bin");

如果我尝试在服务器上添加同一行,则会收到“权限被拒绝”错误。

最佳答案

代码库是 URL 列表。您指定的是文件名,而不是 URL。

这也是一个相当无用的文件名,除非客户端与服务器位于同一主机上,在这种情况下,很难理解为什么要使用代码库功能。即使您有共享驱动器,也可以像使用 java.rmi.server.codebase 一样轻松地在客户端的 CLASSPATH 中指定目录。代码库 ​​URL 需要可以通过以下方式使用:收件人。这就是为什么它们几乎总是 HTTP URL,或者可能是 FTP URL。

关于java - RMI 异常。无法连接到服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17711300/

相关文章:

java - 尝试创建元素列表时出现 JAXB 错误

java - 代码上方的 Eclipse 栏

rest - AWS API 的 Swagger/Postman 集合?

amazon-web-services - 构建项目时 AWS CodeBuild 错误 => YAML_FILE_ERROR 消息 : Runtime version selection is not supported by this build image

python - 无效的 AttributeDataType 输入,考虑使用提供的 AttributeDataType 枚举

java - 远程 JVM 机器人调用

Java RMI : Pass remote object reference back to host

java - 模拟 Java Spring 测试 - NullPointerException

java - Java 代码中 JRuby 对象的序列化

Java RMI 和远程文件访问