J
JulioGracia
Gast
Hi!
Ich versuche gerade ein RMI Server/Client Paar zu programmieren. Für meinen derzeitigen Fehler ist aber soweit ich das sehe nur der Server interessant. Hier ist der Code:
Ich versuche gerade ein RMI Server/Client Paar zu programmieren. Für meinen derzeitigen Fehler ist aber soweit ich das sehe nur der Server interessant. Hier ist der Code:
Java:
package rmi;
import java.net.MalformedURLException;
import java.rmi.Naming;
import java.rmi.registry.LocateRegistry;
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
import java.util.Arrays;
import common.*;
public class RMIServer extends UnicastRemoteObject implements RMIServerI {
private static final long serialVersionUID = 1L;
private int totalMessagesToRcv = -1;
private int totalMessagesRcv = -1;
private int[] receivedMessages;
public RMIServer() throws RemoteException {
}
//this method is the one the client "uses"
public void receiveMessage(MessageInfo msg) throws RemoteException {
if(totalMessagesRcv==-1){
totalMessagesToRcv = msg.totalMessages;
receivedMessages = new int[totalMessagesToRcv];
}
receivedMessages[msg.messageNum-1] = msg.messageNum;
System.out.println("received message number "+msg.messageNum);
if(msg.messageNum==totalMessagesToRcv){
System.out.println("received last message");
}
}
public static void main(String[] args) {
RMIServer rmis = null;
String localhost = "127.0.0.1";
if (System.getSecurityManager() == null) {
System.setSecurityManager(new SecurityManager());
}
try{
rmis = new RMIServer();
}
catch(RemoteException re){
System.err.println("RMIServerI exception:");
re.printStackTrace();
}
String serverURL = new String("rmi://" + localhost + "/RMIServer");
rebindServer(serverURL,rmis);
System.out.println("Server ready..");
}
protected static void rebindServer(String serverURL, RMIServer server) {
try {
LocateRegistry.createRegistry(1099); //registry accepts requests on port 1099
} catch (RemoteException e) {
System.err.println("remoteException while creating registry");
e.printStackTrace();
}
try{
Naming.rebind(serverURL, server);
}
catch(MalformedURLException mue){
System.err.println("name not in appropriate URL format");
mue.printStackTrace();
}
catch(RemoteException re){
System.err.println("Registry could not be contacted");
re.printStackTrace();
}
}
}
[/Java]
Und das ist der Fehler:
[QUOTE]Exception in thread "main" java.security.AccessControlException: access denied (java.net.SocketPermission 127.0.0.1:1099 connect,resolve)
at java.security.AccessControlContext.checkPermission(AccessControlContext.java:323)
at java.security.AccessController.checkPermission(AccessController.java:546)
at java.lang.SecurityManager.checkPermission(SecurityManager.java:532)
at java.lang.SecurityManager.checkConnect(SecurityManager.java:1034)
at java.net.Socket.connect(Socket.java:513)
at java.net.Socket.connect(Socket.java:469)
at java.net.Socket.<init>(Socket.java:366)
at java.net.Socket.<init>(Socket.java:180)
at sun.rmi.transport.proxy.RMIDirectSocketFactory.createSocket(RMIDirectSocketFactory.java:22)
at sun.rmi.transport.proxy.RMIMasterSocketFactory.createSocket(RMIMasterSocketFactory.java:128)
at sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:595)
at sun.rmi.transport.tcp.TCPChannel.createConnection(TCPChannel.java:198)
at sun.rmi.transport.tcp.TCPChannel.newConnection(TCPChannel.java:184)
at sun.rmi.server.UnicastRef.newCall(UnicastRef.java:322)
at sun.rmi.registry.RegistryImpl_Stub.rebind(Unknown Source)
at java.rmi.Naming.rebind(Naming.java:160)
at rmi.RMIServer.rebindServer(RMIServer.java:92)
at rmi.RMIServer.main(RMIServer.java:70)
[/QUOTE]
Ich habe im Internet gesucht und da wird immer wieder etwas über die Java Policy file geredet. Ich habe versucht diese mal zu editieren, aber dann wird mir gesagt, dass ich dazu keine Rechte hätte...
Bin für jede Hilfe dankbar,
Julio