import java.rmi.Remote;
import java.rmi.RemoteException;
import java.util.Date;
/**
* Description:<br>
* 1.创建远程接口,继承java.rmi.Remote接口
* 2.创建远程类,实现远程接口
* 3.创建服务器端程序:负责在rmiregistry注册表中注册远程对象
* 4.创建客户端程序:负责定位远程对象,并调用远程对象的方法
* @author JOJO
* @version 0.1
*/
public interface HelloService extends Remote
{
public String echo (String msg) throws RemoteException;
public Date getTime () throws RemoteException;
}
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
import java.util.Date;
public class HelloServiceImpl extends UnicastRemoteObject implements HelloService
{
private String name;
protected HelloServiceImpl(String name) throws RemoteException
{
this.name = name;
/*
* UnicastRemoteObject的构造方法会调用自身的exportObject(Remote obj,int port)。
* 该方法负责把参数obj指定的对象导出为远程对象,使它具有相应的存根, 并使它能够监听远程客户端的方法调用请求。
* 参数port指定监听的端口。 如果远程对象已经继承其他类,那么可以在构造方法中调用UnicastRemoteObject的
* 静态方法exportObject(Remote obj,int port)。
*/
// UnicastRemoteObject.exportObject(this, 0);
}
public String echo (String msg) throws RemoteException
{
System.out.println(name + ":调用echo()方法。");
return "echo:" + msg + " from " + name;
}
public Date getTime () throws RemoteException
{
System.out.println(name + "调用getTime()方法。");
return new Date();
}
}
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
/**
* Description:<br>
* @author JOJO
* @version 0.1
*/
public class SimpleServer
{
public static void main (String[] args)
{
try
{
HelloService service1 = new HelloServiceImpl("service1");
HelloService service2 = new HelloServiceImpl("service2");
//创建并导出接受指定 port 请求的本地主机上的 Registry 实例。
Registry registry = LocateRegistry.createRegistry(1099);
registry.rebind("HelloService1", service1);
registry.rebind("HelloService2", service2);
System.out.println("服务器注册了两个HelloService对象。");
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
/**
* Description:<br>
*
* @author JOJO
* @version 0.1
*/
public class SimpleClient
{
public static void main (String[] args)
{
try
{
// 返回指定的 host 和 port 上对远程对象 Registry 的引用。
Registry registry = LocateRegistry.getRegistry("127.0.0.1", 1099);
HelloService service1 = (HelloService) registry.lookup("HelloService1");
HelloService service2 = (HelloService) registry.lookup("HelloService2");
System.out.println(service1.echo("hello"));
System.out.println(service2.getTime());
}
catch (Exception e)
{
e.printStackTrace();
}
}
}