1.PerfectTimeI.java
import java.rmi.*;
public interface PerfectTimeI extends Remote {
long getPerfectTime() throws RemoteException;
}
2.PerfectTime.java
//PerfectTime.java
//The implementation of the PerfectTime remote object
import java.net.*;
import java.rmi.*;
import java.rmi.registry.*;
import java.rmi.server.*;
public class PerfectTime extends UnicastRemoteObject implements PerfectTimeI
{
//默认构件器,也要“掷”出RemoteException违例。
public PerfectTime() throws RemoteException {
super();
}
public long getPerfectTime() throws RemoteException {
return System.currentTimeMillis();
}
public static void main(String[] args) {
/*创建和安装一个安全管理器,令其支持RMI.作为Java开发包的一部分,适用于RMI唯一一个是RMISecurityManager.*/
//System.setSecurityManager(new RMISecurityManager());
try {
/*创建远程对象的一个或多个实例,下面是PerfectTime对象*/
PerfectTime pt = new PerfectTime();
/*向RMI远程对象注册表注册至少一个远程对象。一个远程对象拥有的方法即可生成指向其他远程对象的句柄,这样,客户到注册表里访问一次,得到第一个远程对象即可.*/
Naming.bind("rmi://localhost:1099/PerfectTime", pt);
System.out.println("Ready to do Time");
} catch (Exception e) {
e.printStackTrace();
}
}
}
3.DisplayPerfectTime.java
//DisplayPerfectTime.java
//Users remote object PerfectTime
import java.rmi.*;
import java.rmi.registry.*;
public class DisplayPerfectTime {
/*** DisplayPerfectTime 构造子注解。*/
public DisplayPerfectTime() {
super();
}
public static void main(String[] args) {
//System.setSecurityManager(new RMISecurityManager());
try {
PerfectTimeI t = (PerfectTimeI) Naming.lookup("rmi://localhost:1099/PerfectTime");
for (int i = 0; i < 10; i++) {
System.out.println("PerfectTime:" + t.getPerfectTime());
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
4.rmic PerfectTime.java
5.javac *.java
6.Server.bat
@echo off
set Test_HOME=D:/TestCode/RMI/Demo2
cd "%JAVA_HOME%/jre/bin"
start /MIN rmiregistry.exe
cd "%Test_HOME%"
start %JAVA_HOME%/bin/java -Djava.rmi.server.codebase=file:%Test_HOME%/ PerfectTime
7.client.bat
@echo off
set Test_HOME=D:/TestCode/RMI/Demo2
cd %Test_HOME%
%JAVA_HOME%/bin/java DisplayPerfectTime
pause