当WindowsXP客户端上存在防火墙时,RMI调用不起作用,但在Windows 7客户端上则不行

时间:2010-10-19 06:13:20

标签: java windows-7 windows-xp rmi firewall


   我正在使用Java教程中显示的基于RMI的基本客户端/服务器应用程序。我在不同的机器上运行服务器和客户端。我还为服务器和客户端导出远程对象,并使它们彼此可用。

但是,客户端启用了防火墙,因此RMI调用失败(从客户端到服务器或服务器返回到客户端)。此外,当机器具有Windows 7而不是WindowsXP时,只允许来自防火墙的弹出消息使一切运行正常。不知何故,在WindowsXP上也不会发生同样的情况。

我查看了其他类似问题中提到的http://download.oracle.com/javase/6/docs/technotes/guides/rmi/faq.html#firewall,我正在尝试使用固定端口方法(远程对象侦听固定端口)。

代码是这样的:

服务器

Compute engine = new ComputeEngine();  
Compute stub = (Compute) UnicastRemoteObject.exportObject(engine,1299);  
Registry registry = LocateRegistry.createRegistry(1299);  
registry.rebind("Compute", stub);  

客户

String host = "192.168.x.y";  
Registry registry = LocateRegistry.getRegistry(host, 1299);  
Compute comp = (Compute) registry.lookup("Compute");  
Pi task = new Pi(Integer.parseInt(args[0]));  
BigDecimal pi = comp.executeTask(task);  

如果您遇到类似的问题,或者您可以指出我哪里出错,请告诉我。

谢谢,
阿比纳夫。

1 个答案:

答案 0 :(得分:0)

首先尝试注释掉这一行:

Registry registry = LocateRegistry.createRegistry(1299);

并检查你是否有security.policy文件,然后创建

然后尝试以下代码:

grant {
permission java.security.AllPermission "", "";
};

可能您没有设置安全管理器: 在 main 方法中设置如下:

System.setSecurityManager(new RMISecurityManager());