javarmi添加示例
我正在实现一个简单的JavaRMI应用程序。它的主要目标是添加2个整数。代码源如下所示: 客户端和服务器端的AdditionInterface 导入java.rmi.*; 公共接口添加接口扩展远程{ 公共int addint a,int b抛出RemoteException; } Addition.java 附加服务器 附加客户端 客户端和服务器端的安全策略 但是我得到HelloClient异常:java.security.AccessControlException:access denied java.net.SocketPermission 127.0.0.1:1099 connect,resolvejavarmi添加示例,java,rmi,Java,Rmi,我正在实现一个简单的JavaRMI应用程序。它的主要目标是添加2个整数。代码源如下所示: 客户端和服务器端的AdditionInterface 导入java.rmi.*; 公共接口添加接口扩展远程{ 公共int addint a,int b抛出RemoteException; } Addition.java 附加服务器 附加客户端 客户端和服务器端的安全策略 但是我得到HelloClient异常:java.security.AccessControlException:access denied
错误您必须首先启动RMI注册表。试着打电话
java.rmi.registry.LocateRegistry.createRegistry(1099);
在尝试重新绑定远程对象之前。我不确定,但如果注册表已经启动,此调用可能会失败。
第二个问题可能是SecurityManager应用的策略没有连接/解析本地主机的权限。尝试ro注释System.SetSecurityManager新安全管理器;开始吧。默认java策略文件仅授予一个SocketPermission:
permission java.net.SocketPermission "localhost:0", "listen";
除掉安全管理员。除非您正在使用代码库特性,否则您不需要它们。如果这是一个问题,他将得到一个BindException或ConnectExcepton。@user207421你是对的。创建注册表可能是下一个偶然发现的问题,但不是上述异常的原因。
import java.rmi.*;
public class AdditionClient {
public static void main (String[] args) {
AdditionInterface hello;
try {
System.setSecurityManager(new SecurityManager());
hello = (AdditionInterface)Naming.lookup("rmi://localhost/ABC");
int result=hello.add(9,10);
System.out.println("Result is :"+result);
}catch (Exception e) {
System.out.println("HelloClient exception: " + e);
}
}
}
grant {
permission java.security.AllPermission;
};
java.rmi.registry.LocateRegistry.createRegistry(1099);
permission java.net.SocketPermission "localhost:0", "listen";