首先定义远程接口
import java.rmi.Remote;
import java.rmi.RemoteException;
public interface Upper extends Remote{
public String upperCase(String str) throws RemoteException;
}
定义远程实现服务器类
import java.rmi.Naming;
import java.rmi.RMISecurityManager;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
import java.rmi.server.UnicastRemoteObject;
public class UpperImpl extends UnicastRemoteObject implements Upper{
public UpperImpl() throws RemoteException
{
super();
}
public String upperCase(String str) {
return str.toUpperCase();
}
public static void main(String[] args) {
try
{
LocateRegistry.createRegistry(12345);
Upper upper = new UpperImpl();
Naming.rebind("//localhost:12345/Upper",upper);
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
定义客户端类
import java.awt.Toolkit;
import java.io.FileInputStream;
import java.rmi.Naming;
import java.rmi.RMISecurityManager;
public class UpperClient {
public static void main(String[] args) {
try
{
//System.setProperty("java.security.policy","one.policy");
System.setSecurityManager(new RMISecurityManager());
String url = "//192.168.0.88:12345/Upper";
Upper upper = (Upper) Naming.lookup(url);
String greeting = upper.upperCase("abcdefg");
System.out.println(greeting);
}catch(Exception e)
{
e.printStackTrace();
}
}
}
定义权限策略文件 one.policy
grant{
permission java.security.AllPermission;
};
开始运行程序: 请使用命令行运行程序。
A.---->javac *.java
B.---->rmic UpperImpl
C----->java UpperImpl
D---->java -Djava.security.policy=file:./one.policy UpperClient // 这是关键的一步,不要输入错误了。
然后控制台输出 ABCDEFG。 至此结束。
但是我在使用 eclipse IDE 的时候,把
//System.setProperty("java.security.policy","one.policy");
注释打开后,出现如下的异常, 到现在还没有解决,哪位看客知道原因,敬请回复指导。
java.security.AccessControlException: access denied (java.net.SocketPermission 192.168.0.88:12345 connect,resolve)
2008-06-03 14:50:30 下面的方式可以解决问题。
System.setProperty("java.security.policy","file:E:/eclipse_workspace/rmiTest/src/upper/one.policy");