2

我正在尝试通过 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 实例的私有 IP 地址。另一方面,客户端有这条线 - 这是上面的第 11 行:

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

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

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

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

4

2 回答 2

2

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

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

于 2013-07-17T23:17:32.600 回答
0

尝试将您的 jdk7 分级低于更新 21/jdk6 低于更新 45。再次编译并测试此工作问题是 java.rmi.server.useCodebaseOnly 系统属性请查看以下链接以获取两个版本的 jdk 的解决方案

http://docs.oracle.com/javase/7/docs/technotes/guides/rmi/relnotes.html

于 2013-07-22T13:05:32.900 回答