步骤:
1、定义服务端提供的接口类,并实现java.rmi.Remote接口
2、实现自己的服务类
3、启动rmiregistry
4、实现客户端类
5、为服务器的类创建stub类
6、启动服务端,调用client端
详细步骤:
1、实现java.rmi.Remote接口,
package rmi;
import java.rmi.Remote;
import java.rmi.RemoteException;
public interface MyRemote extends Remote {
public String sayHello() throws RemoteException;
}
2、实现自己的服务类并继承UnicastRemoteObject类
package rmi;
import java.rmi.Naming;
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
public class MyRemoteImpl extends UnicastRemoteObject implements MyRemote {
protected MyRemoteImpl() throws RemoteException {
super();
}
public String sayHello() throws RemoteException {
// TODO Auto-generated method stub
return "hello, world";
}
public static void main(String[] args) {
try {
//LocateRegistry.createRegistry(1099);
MyRemote service = new MyRemoteImpl();
Naming.bind("remoteHello", service);
} catch (Exception e) {
e.printStackTrace();
}
}
}
3、启动rmiregistry(jdk 的bin目录下)
rmiregistry是jdk自带的工具,用来将你的服务注册到注册表,直接启动即可。
4、实现客户端类
package rmi;
import java.net.MalformedURLException;
import java.rmi.Naming;
import java.rmi.NotBoundException;
import java.rmi.RemoteException;
public class Client {
public static void main(String[] args) {
try {
MyRemote remote = (MyRemote)Naming.lookup("rmi://127.0.0.1/remoteHello");
System.out.println(remote.sayHello());
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
5、为服务器的类创建stub类
编译MyRemoteImpl,如编译后存放目录为c:/server/rmi/ ,编译Client,如编译后存放目录为c:/client/rmi/, 到c:/server目录下,执行rmic rmi.MyRemoteImpl,将生成的 MyRemoteImpl_Stub.class 复制一份到client目录下(c:/client/rmi/)
6、启动server,java rmi.MyRemoteImpl; 启动client java rmi.Client 。可以得到结果 Hello world
注意事项: