在调试RMI应用程序期间显示随机端口号

时间:2014-03-04 21:52:45

标签: java port rmi policyfiles

我编写了一个示例RMI应用程序,它只是计算两个数字的总和。

我的server.policy看起来像:

grant {
permission java.net.SocketPermission "123.4.567.890:1024-", "accept, resolve";
};

我的client.policy看起来像:

grant codeBase "file:/C:/Users/user/Documents/My_Workspace/Project/RMI/-" {
permission java.net.SocketPermission "123.4.567.890:1024-", "connect, resolve";
};

我阅读了有关策略文件语法的文档,并了解到当您在端口号后添加短划线时,它意味着“此端口号更大”。我不太了解端口,但是,如果我把短信从服务器中删除。政策我得到java.security.AccessControlException随机端口号(看似在50,000到65,000之间),但是,如果我把短信留在客户端.policy我每次都得到相同的java.security.AccessControlException端口号1099是罪魁祸首。

我想知道是否有办法避免将破折号放在我的策略文件中以便让我的RMI应用程序正常工作。

此外,如果它有帮助或重要,我将分别在服务器/客户端的createRegistry()getRegistry()方法中指定端口1099。

1 个答案:

答案 0 :(得分:0)

有。如果:

  1. 您可以通过LocateRegistry.createRegistry()
  2. 从服务器JVM中启动注册表
  3. 您可以从同一个JVM构造或导出所有远程对象,指定端口1099或端口0,或者根本不指定端口号,
  4. (1)或(2)中没有套接字工厂,或者套接字工厂都有equals()方法的合理实现
  5. 所有远程对象将共享同一个端口,端口1099。

    但为什么.policy文件中的破折号如此重要?