接口:
import java.rmi.Remote;
import java.rmi.RemoteException;
public interface IHello extends Remote {
public String helloWorld() throws RemoteException;
}
实现类:
import java.io.Serializable;
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
public class Hello extends UnicastRemoteObject implements IHello, Serializable{
private int index = 0;
protected Hello() throws RemoteException {
}
@Override
public String helloWorld() throws RemoteException {
System.out.println("Hello!" + (index++));
return null;
}
}
import java.net.ServerSocket;
import java.rmi.Naming;
import java.rmi.registry.LocateRegistry;
public class HelloServer {
public static void main(String args[]) {
try {
IHello rhello = new Hello();
LocateRegistry.createRegistry(8888);
Naming.bind("rmi://localhost:8888/Test", rhello);
System.out.println(">>>>>INFO:远程IHello对象绑定成功!");
} catch (Exception e) {
System.out.println("创建远程对象发生异常!");
e.printStackTrace();
}
}
}
客户端:
import java.rmi.Naming;
public class HelloClient {
public static void main(String args[]) {
try {
IHello rhello = (IHello) Naming.lookup("rmi://localhost:8888/Test");
System.out.println(rhello.helloWorld());
} catch (Exception e) {
e.printStackTrace();
}
}
}
上述代码,运行客户端时,在服务器短输出结果,index自增。
但是当实现类Hello不继承UnicastRemoteObject时,即使用以下代码
import java.io.Serializable;
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
public class Hello implements IHello, Serializable{
private int index = 0;
protected Hello() throws RemoteException {
}
@Override
public String helloWorld() throws RemoteException {
System.out.println("Hello!" + (index++));
return null;
}
}
时,运行客户端时,在客户端输出结果,服务器端无反应,index不自增。
扩展java.rmi.server.UnicastRemoteObject
UnicastRemoteObject顾名思义,是让客户机与服务器对象实例建立一对一的连接。