Java 如何连接Oracle VirtualBox';带W8主机的RMI客户端';什么是RMI服务器?

Java 如何连接Oracle VirtualBox';带W8主机的RMI客户端';什么是RMI服务器?,java,rmi,virtualbox,connection-timeout,windows-firewall,Java,Rmi,Virtualbox,Connection Timeout,Windows Firewall,我有一台带有Oracle VirtualBox的W8机器。在这里,我有一台ubuntu机器,只与主机网络连接 VirtualBox纯主机以太网适配器 英特尔PRO/1000 MT台式机(82540EM) 允许所有 在主机上,我有一个类似于RMI服务器的java程序 在虚拟机上,我使用java程序作为RMI客户机 客户端成功地获得注册表,没有任何问题,然后在查找存根时挂起。因此,我: SEVERE: java.rmi.ConnectException: Connection refused to

我有一台带有Oracle VirtualBox的W8机器。在这里,我有一台ubuntu机器,只与主机网络连接

VirtualBox纯主机以太网适配器

英特尔PRO/1000 MT台式机(82540EM)

允许所有

在主机上,我有一个类似于RMI服务器的java程序

在虚拟机上,我使用java程序作为RMI客户机

客户端成功地获得注册表,没有任何问题,然后在查找存根时挂起。因此,我:

SEVERE: java.rmi.ConnectException: Connection refused to host: 192.bla.bla.bla; nested exception is:
        java.net.ConnectException: Connection timed out
        at ...
RMIclient和RMIserver都具有所有权限,以下是RMI连接的代码:

服务器端:

private static void startServer() {
    System.setProperty("java.rmi.server.hostname", "192.bla.bla.bla");

    if (System.getSecurityManager() == null) {
        System.setProperty("java.security.policy", POLICY_FILE_LOC); //all permissions
        System.setSecurityManager(new SecurityManager());
    }
    try {
        String name = "RemoteController";
        RemoteControllerInterface remote = new RemoteController();
        RemoteControllerInterface stub =
            (RemoteControllerInterface) UnicastRemoteObject.exportObject(remote, 0);
        Registry registry = LocateRegistry.createRegistry(1099);
        registry.rebind(name, stub);
    } catch (Exception e) {
        e.printStackTrace();
        System.exit(-1);
    }       
}
客户端:

    RemoteControllerInterface remote = null;

    if (System.getSecurityManager() == null) {
        System.setProperty("java.security.policy", POLICY_FILE_LOC); //all permissions
        System.setSecurityManager(new SecurityManager());
    }

    try {
        String name = "RemoteController";
        Registry registry = LocateRegistry.getRegistry("192.bla.bla.bla");
        remote  = (RemoteControllerInterface) registry.lookup(name); // stuck here
        remote.connect(); // sample remote method
    } catch (Exception e) {
        e.printStackTrace();
    }

我使用了相同的客户端代码在主机上运行它,所有的工作都很好,这就是为什么我认为VirtualBox的配置可能存在一些问题。

我不知道Windows防火墙,所以以下是一般准则:

您不仅需要在Windows上为RMI注册表打开端口1099,还需要为服务器RMI对象本身打开另一个端口-不幸的是,我认为它会打开一个随机端口(请参阅有关此问题的其他StackOverflow问题)。此外,您可能还需要允许VirtualBox纯主机网络与本地主机通信(是的,我知道这就是纯主机网络的全部意义,我只是说)


但您不需要允许任何其他计算机访问您的Java程序(对吗?),因此,如果Windows Firewall允许您进行配置,您只需允许从VirtualBox纯主机网络进行不受限制的访问。

主机上的1099端口是否打开?是。事实上,我刚刚发现,如果我完全禁用W8防火墙它的工作!现在我想知道如何配置它以使其保持工作状态……就我个人而言,我不使用w8,因此我无法对此提供帮助。我建议使用谷歌!谷歌对此无能为力。。。一些罕见的案例!好的,我只需要为代码中的每个对象选择端口,仅此而已。希望有更好的解决办法。谢谢:)