java - 文件传输 RMI

标签 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,但出现相同的错误。

解决方案

指向特定的 java 策略文件,可以是 JRE 文件夹中的文件,也可以是特定策略文件中的文件。

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

最佳答案

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

关于java - 文件传输 RMI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13957140/

相关文章:

java - 如何在 JDBC 中执行多个查询

java - lambda 表达式有多少种方式可以立即返回输入?

Java 数组列表/RMI

java - 序列化字段类

java - 使用 TCP 在 Java(Android 客户端)和 C(PC 服务器 - Linux)之间传输文件

c# - 安全上传/下载文件,winforms c# 和 asp.net

java - 使用 Firebase 和 Android Studio 的 OTP 代码问题

java - 除非程序从终端运行,否则 JFrame 框架图标不会显示

java - Java分布式计算,应用服务器的选择

http - 为(可能)非常大的文本文件发送部分更新/添加