java中使用rmi進行遠程方法調用

java中進行遠程方法調用,能支持分佈式計算。並且可以實現在server的修改,能反應到各個client。

假如server的ip是:192.168.11.2,

server端的代碼如下:

/**
 * 
 */
package com.vs.rmi;

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

public interface Product extends Remote {
	
	public String getDescription() throws RemoteException;
}

package com.vs.rmi;

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

public class ProductImpl extends UnicastRemoteObject implements Product {

	private String name;
	
    public ProductImpl() throws RemoteException
    {
    	super();
    	name = "my rmi";
    }
    
	@Override
	public String getDescription() throws RemoteException {
		return "hello world, " + name;
	}
}

/**
 * 
 */
package com.vs.rmi;

import java.rmi.Naming;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;

/**
 * @author hadoop
 * 
 */
public class ProductServer {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		/*
		 * 創建和安裝一個安全管理器,令其支持 RMI. 作爲 Java 開發包的一部分
		 * 
		 * 適用於 RMI 唯一一個是 RMISecurityManager.
		 * 
		 * 
		 * 
		 * if(System.getSecurityManager() == null) {
		 * 
		 * System.setSecurityManager(new RMISecurityManager());
		 * 
		 * }
		 */

		try {
			LocateRegistry.createRegistry(8808);
			ProductImpl server = new ProductImpl();
			Naming.rebind("//192.168.11.2:8808/SAMPLE-SERVER", server);
			System.out.println("遠程對象註冊成功, RMI 服務已經啓動,等待客戶端調用 ....");
		} catch (java.net.MalformedURLException me) {
			System.out.println("Malformed URL:" + me.toString());
		} catch (RemoteException re) {
			System.out.println("Remote exception:" + re.toString());
		}
	}

}


Project接口必須打成jar包,在client的包中進行引入。


client端的代碼如下:

package com.vs.myrmi;

import java.rmi.*;

import com.vs.rmi.Product;

public class RmiSampleClient {
	
   public static void main(String[] args)
   {
       try {
    	   String url = "//192.168.11.2:8808/SAMPLE-SERVER";
    	   Product product = (Product)Naming.lookup(url);
    	   System.out.println(product.getDescription());
       } catch (RemoteException exc) {
           System.out.println("Error in lookup: " + exc.toString());
       } catch (java.net.MalformedURLException exc) {
           System.out.println("Malformed URL: " + exc.toString());
       } catch (java.rmi.NotBoundException exc) {
           System.out.println("NotBound: " + exc.toString());
       }
    }
}

先執行server端進行監聽,然後執行client端,client執行的結果如下:

hello world, my rmi

java1.6中,已經不需要手動使用rmic命令生成骨架。

發佈了55 篇原創文章 · 獲贊 6 · 訪問量 12萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章