接口:
import java.rmi.*;
public interface PerfectTimeI extends Remote{
public String GetTime() throws RemoteException;
}
服务提供:
import java.rmi.*;
import java.rmi.server.*;
import java.rmi.registry.*;
import java.io.*;
import java.net.*;
public class myServer extends UnicastRemoteObject
implements PerfectTimeI{
public String GetTime()throws RemoteException
{
return Long.toString(System.currentTimeMillis());
}
public myServer() throws RemoteException
{
//super();
}
public static void main(String[] args) throws Exception {
myServer s=new myServer();
Naming.rebind("/myServer",s);
System.out.println("Ready to do time");
}
}
客户端:
import java.rmi.*;
import java.rmi.registry.*;
public class myClient{
public static void main(String[] args) {
System.setSecurityManager(new RMISecurityManager());
try {
PerfectTimeI t = (PerfectTimeI) Naming.lookup("/myServer");
for (int i = 0; i < 10; i++) {
System.out.println("PerfectTime:" + t.GetTime());
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
因为rmi有安全限制,所以在客户端必须建立一个策略文件。假设名为client.policy
grant {
// Allow everything for now
permission java.security.AllPermission;
};
命令行:
第一个窗口:
d:/javac *.java
d:/rmic -v1.1 -d d: myServer
d:/start rmiregistry
第二个窗口:
d:/java myServer
第三个窗口:
d:/java myClient 不行
d:/start java -Djava.security.policy=client.policy myclient