標籤:ring locate string main connected hello imp java 執行
Java 使用RMI
Java使用序列化的方式,可以實現遠端的方法調用,在分工合作時非常方便。本文記錄使用java標準庫實現rmi
一、服務端結構
.├── pom.xml├── src│ ├── main│ │ └── java│ │ └── hello│ │ ├── HelloImpl.java│ │ ├── HelloServer.java│ │ └── IHello.java│ └── test│ └── java│ └── mycom│ └── AppTest.java└── target
IHello.java
package hello;import java.rmi.Remote;import java.rmi.RemoteException;public interface IHello extends Remote { public String sayHelloToSomeBody(String someBodyName) throws RemoteException;
HelloImpl.java
package hello;import java.rmi.RemoteException;import java.rmi.server.UnicastRemoteObject;public class HelloImpl extends UnicastRemoteObject implements IHello { public HelloImpl() throws RemoteException { super(); } public String sayHelloToSomeBody(String someBodyName) throws RemoteException { System.out.println("Connected sucessfully!"); return "你好," + someBodyName + "!"; }}
HelloServer.java
package hello;import java.net.MalformedURLException;import java.rmi.AlreadyBoundException;import java.rmi.Naming;import java.rmi.RemoteException;import java.rmi.registry.LocateRegistry;public class HelloServer { public static void main(String args[]) { try { IHello rhello = new HelloImpl(); LocateRegistry.createRegistry(8888); // 如果配置在遠程伺服器,把地址換成你的ip System.setProperty("java.rmi.server.hostname","127.0.0.1"); Naming.bind("rmi://localhost:8888/RHello", rhello); System.out.println(">>>>>INFO:遠程IHello對象綁定成功!"); } catch (RemoteException e) { System.out.println("建立遠程對象發生異常!"); e.printStackTrace(); } catch (AlreadyBoundException e) { System.out.println("發生重複綁定對象異常!"); e.printStackTrace(); } catch (MalformedURLException e) { System.out.println("發生URL畸形異常!"); e.printStackTrace(); } }}
在服務端啟動HelloServer.java就會在8888連接埠監聽請求了
二、用戶端
用戶端只要分享介面檔案就好了
啟動代碼
package hello;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 { // 填寫伺服器ip IHello rhello = (IHello) Naming.lookup("rmi://127.0.0.1:8888/RHello"); System.out.println(rhello.sayHelloToSomeBody("Erich")); } catch (NotBoundException e) { } catch (MalformedURLException e) { e.printStackTrace(); e.printStackTrace(); } catch (RemoteException e) { e.printStackTrace(); } }}
三、小結
可以看到,用戶端只要得到介面檔案就能執行操作,而具體的實現交給服務端完成,這種架構可以解耦調用和實現
Java 使用RMI