gpt4 book ai didi

java - 当 WindowsXP 客户端上存在防火墙时,RMI 调用不起作用,但在 Windows 7 客户端上正常

转载 作者:行者123 更新时间:2023-12-01 05:53:07 25 4
gpt4 key购买 nike


我正在使用 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);

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

谢谢,
阿比纳夫。

最佳答案

首先尝试注释掉这一行:

Registry registry = LocateRegistry.createRegistry(1299);

并检查您是否有 security.policy 文件,如果没有,则创建该文件

然后尝试以下代码:

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

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

System.setSecurityManager(new RMISecurityManager());

关于java - 当 WindowsXP 客户端上存在防火墙时,RMI 调用不起作用,但在 Windows 7 客户端上正常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3965750/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com