Java客户端-服务器:从另一个JVM调用一个JVM中的方法
示例
共享的远程接口:
package remote; import java.rmi.Remote; import java.rmi.RemoteException; public interface RemoteServer extends Remote { int stringToInt(String string) throws RemoteException; }
实现共享远程接口的服务器:
package server; import java.rmi.RemoteException; import java.rmi.registry.LocateRegistry; import java.rmi.registry.Registry; import java.rmi.server.UnicastRemoteObject; import remote.RemoteServer; public class Server implements RemoteServer { @Override public int stringToInt(String string) throws RemoteException { System.out.println("Server received: \"" + string + "\""); return Integer.parseInt(string); } public static void main(String[] args) { try { Registry reg = LocateRegistry.createRegistry(Registry.REGISTRY_PORT); Server server = new Server(); UnicastRemoteObject.exportObject(server, Registry.REGISTRY_PORT); reg.rebind("ServerName", server); } catch (RemoteException e) { e.printStackTrace(); } } }
客户端(远程)调用服务器上的方法:
package client; import java.rmi.NotBoundException; import java.rmi.RemoteException; import java.rmi.registry.LocateRegistry; import java.rmi.registry.Registry; import remote.RemoteServer; public class Client { static RemoteServer server; public static void main(String[] args) { try { Registry reg = LocateRegistry.getRegistry(); server = (RemoteServer) reg.lookup("ServerName"); } catch (RemoteException | NotBoundException e) { e.printStackTrace(); } Client client = new Client(); client.callServer(); } void callServer() { try { int i = server.stringToInt("120"); System.out.println("客户收到: " + i); } catch (RemoteException e) { e.printStackTrace(); } } }
输出:
服务器收到:“120”
客户收到:120