我只是關注如何使用RMI發送文件的教程。文件傳輸RMI
教程:Link
我遇到一個錯誤,當我嘗試運行我的服務器。我所做的與教程不同的唯一改變是我已將端口更改爲1097而不是默認的1099.
我該如何解決此錯誤?
這是我收到錯誤:11
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)
線是Naming.rebind()。
這裏:
FileInterface fi = new FileImpl("FileServer");
Naming.rebind("//127.0.0.1:1097/FileServer", fi);
我試圖改變到本地主機地址,但出現同樣的錯誤。
SOLUTION
點到特定的Java策略文件,無論是在JRE文件夾或具體的政策文件。
java -Djava.security.policy="C:\\FT_RMI\\java.policy" FileServer
您必須允許套接字連接您的JRE下的安全屬性。你可以在jre/lib/security/java.policy下看到這個 – muruga
我試過你說的話,我還在我的代碼所在的位置添加了一個策略文件,並在我嘗試運行我的服務器時指向它。我嘗試了允許所有權限,如本教程中所述。這些都不起作用。每次都有相同的錯誤。我不知道如何解決這個問題。 – user1221292
檢查正在使用哪個JRE。如果你有多個,你可以改變它,但通過另一個執行程序。只是一個想法。祝你好運! – muruga