文件传输RMI

时间:2012-12-19 16:48:52

标签: java rmi file-transfer

我正在阅读有关如何使用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,但发生了同样的错误。

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

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

2 个答案:

答案 0 :(得分:3)

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

下看到这个

答案 1 :(得分:0)

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