我有一台带有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的配置可能存在一些问题。
答案 0 :(得分:0)
我不知道Windows防火墙所以这些是一般准则:
您不仅需要在Windows上为RMI注册表打开端口1099,还需要为您的服务器RMI对象本身打开另一个端口 - 我认为它会打开一个随机端口,不幸的是(请参阅其他StackOverflow问题) 。此外,您可能还需要允许VirtualBox仅主机网络与localhost通信(是的,我知道这是仅主机网络的整点,我只是说)。 / p>
但是您不需要允许任何其他计算机访问您的Java程序(对吗?),因此您可以允许从VirtualBox仅限主机的网络进行不受限制的访问,如果Windows防火墙允许您配置它来执行该操作。