回 帖 发 新 帖 刷新版面

主题:RMI同一内网不同机器连接问题

我用java写了一个RMI的服务程序和客户端程序,首先说明一下我的服务端程序和客户端程序是两个不同的项目,如果服务端程序和客户端程序在同一太电脑上访问是没有问题的,但是我把客户端程序拷贝到同一内网的其他机器上就不行了,Exception in thread "main" java.security.AccessControlException: access denied (java.net.SocketPermission 192.168.40.10:1099 connect,resolve)
说明:192.168.40.10是服务器的内网IP,请问这是什么原因
下面是我的服务器代码
import java.net.MalformedURLException;
import java.rmi.AlreadyBoundException;
import java.rmi.Naming;
import java.rmi.RMISecurityManager;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
import java.rmi.server.RMISocketFactory;


public class RMIServer {

    /**
     * @param args
     * @throws AlreadyBoundException 
     */
    public static void main(String[] args) throws RemoteException,MalformedURLException, AlreadyBoundException {
        // 不必再执行rmiregistry了   
        Registry r = LocateRegistry.getRegistry();   
        LocateRegistry.createRegistry(1099);
        HelloInterface hello = new Helloimpl();   
  
        // 注册服务   
        Naming.rebind("rmi://192.168.40.10/hello",hello);

    }

}
 
下面是客户端代码
    public static void main(String[] args) throws MalformedURLException,RemoteException,NotBoundException{
        System.setSecurityManager(new RMISecurityManager());
        HelloInterface hello = (HelloInterface) Naming.lookup("//192.168.40.10/hello");
        System.out.println(hello.sayHello());
    } 
}
 
在客户端和服务器端都有_stub.class文件,在网上看到一些帖子说需要_stub.class和_Skel.class,_Skel.class是放在服务器端,_stub.class是放在客户端,但是很奇怪的是我的生成出来只有_stub.class而没有_Skel.class,后来又在网上看到一句话:
jdk1.5对rmi作了简化,只生成_stub.class。 

_Skel.class是jdk1.4及以下版本才有的。
 
我用的是JDK1.6,如果是优化应该就是正常的撒,所以在客户端和服务器端都有_stub.class文件,还是不行,总不可能让我在装一个1.4的来生成一个_Skel.class吧.
在JDK和JRE的java.policy都加上了
    permission java.net.SocketPermission "*:1024-65535","connect,accept";
    permission java.security.AllPermission "", "";
现在我真的不知道是怎么回事了,如果有哪位大哥知道怎么解决这个错误,请及时告诉我

回复列表 (共1个回复)

沙发

access denied 

连接被拒绝,检测防火墙吧.

我来回复

您尚未登录,请登录后再回复。点此登录或注册