远程对象接口
1 import java.rmi.Remote; 2 import java.rmi.RemoteException; 3 4 /** 5 * 定义RMI远程对象接口, 6 * 1.继承Remote 7 * 2.所有方法必须抛出RemoteException 8 */ 9 public interface IRmiObj extends Remote { 10 public void sayHello( String name) throws RemoteException; 11 public String getHello( String name) throws RemoteException; 12 13 }
远程对象接口实现类
1 import java.rmi.RemoteException; 2 import java.rmi.server.UnicastRemoteObject; 3 4 /** 5 * 接口IRmiObj实现类 6 * 1.接口实现类同时要实现Serializable接口,继承UnicastRemoteObject类,间接实现了serializable接口 7 * 2.因为构造方法需要抛出RemoteException,所以不能缺省使用隐含的无参构造方法,而应该自己显式定义构造方法。 8 */ 9 public class RmiObjImpl extends UnicastRemoteObject implements IRmiObj { 10 /** 11 * 因为构造方法需要抛出RemoteException,所以不能缺省使用隐含的无参构造方法,而应该自己显式定义构造方法。 12 * 13 * @throws RemoteException 14 */ 15 public RmiObjImpl() throws RemoteException { 16 super(); 17 } 18 19 public void sayHello(String name) throws RemoteException { 20 System.out.println("welcome " + name); 21 } 22 23 public String getHello(String name) throws RemoteException { 24 return "Hello " + name; 25 } 26 }
RMI服务端
1 import java.net.MalformedURLException; 2 import java.rmi.AlreadyBoundException; 3 import java.rmi.Naming; 4 import java.rmi.RemoteException; 5 import java.rmi.registry.LocateRegistry; 6 7 /** 8 * Rmi服务端 9 */ 10 public class RmiServer { 11 public static void main(String[] args) throws RemoteException { 12 // 创建一个远程对象 13 IRmiObj rmi = new RmiObjImpl(); 14 // 生成远程对象注册表Registry实例,并指定端口为8888,默认为1099 15 // 同一个端口的对象只能生成一次 16 LocateRegistry.createRegistry(8888); 17 18 try { 19 // 把远程对象注册到RMI注册服务器上,并命名为rmi 20 Naming.bind("rmi://192.168.21.1:8888/rmi", rmi); 21 System.out.println("rmi://192.168.21.1:8888/rmi is runnig..."); 22 } catch (AlreadyBoundException e) { 23 e.printStackTrace(); 24 } catch (MalformedURLException e) { 25 e.printStackTrace(); 26 } 27 } 28 }
RMI客户端
1 import java.net.MalformedURLException; 2 import java.rmi.Naming; 3 import java.rmi.NotBoundException; 4 import java.rmi.RemoteException; 5 6 /** 7 * Rmi客户端 8 */ 9 public class RmiClient { 10 public static void main(String[] args) { 11 System.out.println("Hello World!"); 12 try { 13 IRmi rmi = (IRmi) Naming.lookup("rmi://192.168.21.1:8888/rmi"); 14 String res = rmi.getHello("zhangsan"); 15 System.out.println(res); 16 rmi.sayHello("zhangsan"); 17 } catch (NotBoundException e) { 18 e.printStackTrace(); 19 } catch (MalformedURLException e) { 20 e.printStackTrace(); 21 } catch (RemoteException e) { 22 e.printStackTrace(); 23 } 24 } 25 }