2012-12-19 46 views
0

我只是關注如何使用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 
+1

您必須允許套接字連接您的JRE下的安全屬性。你可以在jre/lib/security/java.policy下看到這個 – muruga

+0

我試過你說的話,我還在我的代碼所在的位置添加了一個策略文件,並在我嘗試運行我的服務器時指向它。我嘗試了允許所有權限,如本教程中所述。這些都不起作用。每次都有相同的錯誤。我不知道如何解決這個問題。 – user1221292

+0

檢查正在使用哪個JRE。如果你有多個,你可以改變它,但通過另一個執行程序。只是一個想法。祝你好運! – muruga

回答

3

您必須允許套接字連接到JRE下的安全屬性。你可以在jre/lib/security/java.policy下看到這個

0

你正在運行你的服務器在SecurityManager.除非你使用RMI代碼庫功能,或者你有另一個特定的安全需求來指示它在服務器中的使用,去掉它。