【问题标题】:File Transfer RMI文件传输 RMI
【发布时间】:2012-12-20 18:23:36
【问题描述】:

我只是在学习如何使用 RMI 发送文件的教程。

教程:Link

当我尝试运行我的服务器时遇到错误。我所做的与教程不同的唯一更改是我将端口更改为 1097 而不是默认的 1099。

我该如何解决这个错误?

这是我收到的错误:

C:\Program Files\Java\jdk1.7.0_09\bin\FT_RMI>java -Djava.security.policy=policy.
txt FileServer
FileServer: access denied ("java.net.SocketPermission" "127.0.0.1:1097" "connect
,resolve")
java.security.AccessControlException: access denied ("java.net.SocketPermission"
 "127.0.0.1:1097" "connect,resolve")
        at java.security.AccessControlContext.checkPermission(Unknown Source)
        at java.security.AccessController.checkPermission(Unknown Source)
        at java.lang.SecurityManager.checkPermission(Unknown Source)
        at java.lang.SecurityManager.checkConnect(Unknown Source)
        at java.net.Socket.connect(Unknown Source)
        at java.net.Socket.connect(Unknown Source)
        at java.net.Socket.<init>(Unknown Source)
        at java.net.Socket.<init>(Unknown Source)
        at sun.rmi.transport.proxy.RMIDirectSocketFactory.createSocket(Unknown S
ource)
        at sun.rmi.transport.proxy.RMIMasterSocketFactory.createSocket(Unknown S
ource)
        at sun.rmi.transport.tcp.TCPEndpoint.newSocket(Unknown Source)
        at sun.rmi.transport.tcp.TCPChannel.createConnection(Unknown Source)
        at sun.rmi.transport.tcp.TCPChannel.newConnection(Unknown Source)
        at sun.rmi.server.UnicastRef.newCall(Unknown Source)
        at sun.rmi.registry.RegistryImpl_Stub.rebind(Unknown Source)
        at java.rmi.Naming.rebind(Unknown Source)
        at FileServer.main(FileServer.java:11)

第 11 行是 Naming.rebind()。

这里:

FileInterface fi = new FileImpl("FileServer");
     Naming.rebind("//127.0.0.1:1097/FileServer", fi);

我尝试将地址更改为localhost,但出现同样的错误。

解决方案

指向特定的 java 策略文件,在 JRE 文件夹或特定的策略文件中。

java -Djava.security.policy="C:\\FT_RMI\\java.policy" FileServer

【问题讨论】:

  • 您必须在 JRE 下的安全属性上允许套接字连接。你可以在 jre/lib/security/java.policy 下看到这个
  • 我已经尝试了你所说的,我还在我的代码所在的位置添加了一个策略文件,并在我尝试运行我的服务器时指向它。我已尝试按照教程中的说明允许所有权限。这些都不起作用。每次都是同样的错误。我不知道如何解决这个问题。
  • 检查正在使用的 JRE。如果您有多个,您可能会更改其中一个但通过另一个执行程序。只是一个想法。祝你好运!
  • 终于到了。谢谢你的帮助。如果您将第一个答案作为正确答案,我可以为您接受。

标签: java rmi file-transfer


【解决方案1】:

您必须在 JRE 下的安全属性上允许套接字连接。你可以在 jre/lib/security/java.policy 下看到这个

【讨论】:

    【解决方案2】:

    您在SecurityManager. 下运行您的服务器,除非您正在使用 RMI 代码库功能,或者您有其他特定的安全要求要求在服务器中使用它,否则只需将其删除。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-11-14
      • 2023-03-17
      • 2021-08-14
      • 1970-01-01
      • 2014-03-06
      • 1970-01-01
      • 1970-01-01
      • 2016-07-28
      相关资源
      最近更新 更多