服务接口
import java.rmi.Remote;
import java.rmi.RemoteException;
/**
* 接口继承Remote,并且方法抛出RemoteException
* @author sihang
*
*/
public interface IHelloService extends Remote{
public String helloWorld() throws RemoteException;
public String hello(String name) throws RemoteException;
}
服务实现类
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
public class HelloServiceImpl extends UnicastRemoteObject implements IHelloService{
/**
*
*/
private static final long serialVersionUID = 165569370270920178L;
/**
* 构造方法必须抛RemoteException异常
* @throws RemoteException
*/
public HelloServiceImpl() throws RemoteException{
}
@Override
public String helloWorld() throws RemoteException
{
return "Hello Java RMI";
}
@Override
public String hello(String name) throws RemoteException
{
return "Hello," + name;
}
}
服务端程序
import java.net.MalformedURLException;
import java.rmi.AlreadyBoundException;
import java.rmi.Naming;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
/**
* Java RMI服务端
* @author sihang
*
*/
public class RMIServer {
public static void main(String[] args) throws RemoteException{
IHelloService helloService = new HelloServiceImpl();
try
{
//本地远程调用对象注册表,指定端口8082
LocateRegistry.createRegistry(8082);
//将服务绑定到注册表中
Naming.bind("rmi://localhost:8082/helloService", helloService);
} catch (RemoteException e)
{
e.printStackTrace();
} catch (MalformedURLException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
} catch (AlreadyBoundException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
客户端程序
import java.net.MalformedURLException;
import java.rmi.Naming;
import java.rmi.NotBoundException;
import java.rmi.RemoteException;
public class RMIClient {
public static void main(String[] args){
try
{
IHelloService helloService = (IHelloService) Naming.lookup("rmi://localhost:8082/helloService");
System.out.println(helloService.helloWorld());
System.out.println(helloService.hello("haha"));
} catch (MalformedURLException e)
{
e.printStackTrace();
} catch (RemoteException e)
{
e.printStackTrace();
} catch (NotBoundException e)
{
e.printStackTrace();
}
}
}