Java RMI连接到localhost失败

时间:2014-11-10 14:51:30

标签: java rmi

我从RMI开始。

我不想用Java为数据库管理器创建一个服务器(是大学的东​​西),当我运行下面列出的代码时,为了启动服务器的接口,我与localhost的连接失败:

顺便说一句,我使用OS X和Eclipse进行编码。

/**
 * 
 */
package es.uned.database;

import es.uned.common.IBasededatos;
import es.uned.common.Utils;

import java.rmi.Naming;
import java.rmi.RMISecurityManager;
import java.rmi.RemoteException;
import java.rmi.server.*;

import es.uned.common.IServidor;

/**
 *  
 * @author 
 * 
 */
public class Basededatos extends UnicastRemoteObject implements IBasededatos{
    protected Basededatos() throws RemoteException {
        super();
        // TODO Auto-generated constructor stub
    }

    public static void main(String[] args) throws Exception {

        Utils.setCodeBase(IServidor.class); 


        if (System.getSecurityManager()==null) {
            System.setSecurityManager(new RMISecurityManager());
        }
        String nombre = "//localhost/Basededatos";
        try{
            IBasededatos servidorBD = new Basededatos();
            Naming.rebind(nombre, servidorBD);
            System.out.println("Data base is up an ready");
        }catch (Exception e) {
            System.err.println("Database exception: " + e.getMessage());
            e.printStackTrace();
        }

    }
}

这是我收到的错误消息。

访问被拒绝(“java.net.SocketPermission”“127.0.0.1:1099”“connect,resolve”)

我尝试过其他代码,但取得了同样的成功

/**
 * 
 */
package es.uned.database;

import es.uned.common.IBasededatos;
import es.uned.common.Utils;
import java.rmi.RMISecurityManager;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
import java.rmi.server.*;

/**
 *  
 * @author 
 * 
 */
public class Basededatos implements IBasededatos{
    public Basededatos()  {
        super();
        // TODO Auto-generated constructor stub
    }

    public static void main(String[] args) throws Exception {

        //Utils.setCodeBase(IServidor.class);   


        if (System.getSecurityManager()==null) {
            System.setSecurityManager(new RMISecurityManager());
        }
        String nombre = "//localhost/Basededatos";
        try{
            IBasededatos servidorBD = new Basededatos();
            IBasededatos stub = (IBasededatos)UnicastRemoteObject.exportObject(servidorBD, 1099);
            Registry registry = LocateRegistry.getRegistry();
            registry.rebind(nombre, servidorBD);
            System.out.println("Servidor Base de datos arriba");
        }catch (Exception e) {
            System.err.println("Excepcion base de datos: " + e.getMessage());
            e.printStackTrace();
        }

    }
}

任何人都可以帮助我吗? 非常感谢

1 个答案:

答案 0 :(得分:0)

  1. 客户端从错误的地方获取注册表。它需要查找的注册表位于服务器主机,而不是它自己的localhost。

  2. RMI URL用于命名类。您正在使用客户端中的注册表界面,因此您根本不应指定//localhost/