我正在使用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);
如果您遇到类似的问题,或者您可以指出我哪里出错,请告诉我。
谢谢,
阿比纳夫。
答案 0 :(得分:0)
首先尝试注释掉这一行:
Registry registry = LocateRegistry.createRegistry(1299);
并检查你是否有security.policy文件,然后创建
然后尝试以下代码:
grant {
permission java.security.AllPermission "", "";
};
可能您没有设置安全管理器: 在 main 方法中设置如下:
System.setSecurityManager(new RMISecurityManager());