Java RMI 简明教程

1、写接口:

package rmi.server;

import java.rmi.Remote;
import java.rmi.RemoteException;

public interface MyRemote extends Remote {
	
	String doSomeThingA() throws RemoteException;
	
	String doSomeThingB() throws RemoteException;

}

2、写实现类:

package rmi.server;

import java.rmi.Naming;
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;

public class MyRemoteImpl extends UnicastRemoteObject implements MyRemote {
	
	private static final long serialVersionUID = 1L;
	
	private String string;
	
	public MyRemoteImpl() throws RemoteException {
		string = "" + System.currentTimeMillis();
	}

	@Override
	public String doSomeThingA() {
		return "A:" + string;
	}

	@Override
	public String doSomeThingB() {
		return "B:" + string;
	}
	
	public static void main(String[] args) throws Exception {
		MyRemote myRemote = new MyRemoteImpl();
		Naming.bind("myRemote", myRemote);
	}

}

3、生成stub
在命令行进入class文件所在的根目录,比如我机器上的对应目录是:
D:\workspace\youbang\rmi_server\build\classes
注意,要进入根包所在目录,而不是进入MyRemoteImpl.class所在的目录。
在这个目录下执行命令:

rmic rmi.server.MyRemoteImpl

进入目录D:\workspace\youbang\rmi_server\build\classes\rmi\server,会发现多出一个.class文件:MyRemoteImpl_Stub.class

4、执行注册命令(目录不变)

rmiregistry

5、运行rmi.server.MyRemoteImpl:

java rmi.server.MyRemoteImpl

这样,RMI的服务端就运行起来了。

6、写一个客户端程序调用一下试试:

package rmi.server;

import java.rmi.Naming;

public class Test {

	public static void main(String[] args) throws Exception {
		MyRemote myRemote = (MyRemote) Naming.lookup("rmi://127.0.0.1/myRemote");
		System.out.println(myRemote.doSomeThingA());
		System.out.println(myRemote.doSomeThingB());
	}

}

运行结果:
A:1547025085428
B:1547025085428

写在末尾:
值得一提的是,MyRemote.java类中所有方法的参数和返回值要么是原始类型,要么是可序列化类型。另外,在运行MyRemoteImpl之前,要先执行rmiregistry命令。

猜你喜欢

转载自blog.csdn.net/look4liming/article/details/86165224
今日推荐