RMI在自己的機器上的運行以及使用

/********************************************************************************
* 運行RMI的基本步驟以及注意事項
* 1. 最好是所有的Java文件都在一個包裏面,
* 2. 在對Java文件進行編譯的時候最好要把裏面的包名去掉
* 3. 先生成.class文件
* 4. 對於實現服務器端的接口的文件,我們在它所在的目錄中用 “rmic 文件名” 來生成stub文件
* 5. 下面的步驟我們開始正式運行: (1) .先加入Java的策略文件: 在cmd中使用如下命令:
* rmiregistry -J-Djava.security.policy=java.policy啓動註冊表
* (2) .在DOS下運行 rmiregistry 這個命令是開啓RMI的註冊服務
* (3) .運行服務端的程序 ,使用Java命令,如果這個時候出現了錯誤的話那就絮語奧用下面的命令來制定stub文件的位置:
* java.exe -Djava.rmi.server.codebase=file:/stub文件的目錄/ 服務器端主程序
* 例如“ java.exe -Djava.rmi.server.codebase=file:/E:\MIS_Interface\momo\TestEasy\classes/ RMI_Server”
* (4). 使用Java命令啓動客戶端的主程序
* 這樣就OK了
*
*其中客戶端要有接口和stub文件的.class文件
*例如:服務器端的接口類是Product,它擴展了Remote接口
* 其中的接口的實現類是ProductImpl。它實現了Product中定義的方法
* 其中服務器端的主程序是ProductServer,它用來啓動和註冊上面的實現類
* 而客戶端的主程序是ProductClient,
* 這個時候服務器端目錄下面應該有的文件是: Product.class ProductImpl.class ProductServer.class 以及 ProductImpl_stub.class
* 而客戶端目錄下面應該有的文件是: Product.class ProductClient.class 以及 ProductImpl_stub.class
* 這裏,上面的rmic 名利生成stub文件就是: rmic ProductImpl,這樣就可以生成ProductImpl_stub.class文件了
* 下面的是四個文件的實現程序代碼:
***********************************************************************************/


/**************************************************************
Product.java:
**************************************************************/
import java.rmi.*;

public interface Product extends Remote{

String getDescription() throws RemoteException;

}


/*************************************************************
ProductImpl.java
*************************************************************/
import java.rmi.*;
import java.rmi.server.*;
public class ProductImpl extends UnicastRemoteObject implements Product{
public ProductImpl(String s) throws RemoteException
{
name=s;
}
public String getDescription()
{
return "I am a "+name+" buy me";
}

private String name;
}


/**************************************************************
ProductServer.java
***************************************************************/
import java.rmi.*;
import java.rmi.server.*;
public class ProductServer {
public static void main(String[] args) {
// if(System.getSecurityManager()==null)
System.setSecurityManager(new RMISecurityManager());

System.out.println("construction server implementation...............");

try
{
ProductImpl p1=new ProductImpl("tomato");
ProductImpl p2=new ProductImpl("tudou");
System.out.println("Binding server implementations to registry.........");
// Naming.rebind("tomato1",p1);
// Naming.rebind("tudou1",p2);
/*****************************
* 在這裏,我們需要先用Windows命令行的形式輸入rmiregistry -J-Djava.security.policy=java.policy啓動註冊表
* 否則的話程序就會出現錯誤
*/

Naming.bind("//121.250.216.101:1099/toma",p1);
Naming.bind("//121.250.216.101:1099/tud",p2);
System.out.println("waiting for invacations from clients...............");
System.out.println("----------------------------------");
// String[] name=Naming.list("");
// for(int i=0;i<name.length;i++)
// {
// System.out.println(name[i]);
// }

}
catch(Exception e)
{
System.out.println("You have an error :"+e.getMessage());
}
}
}


/***************************************************************
ProductClient.java
****************************************************************/
import java.rmi.*;
import java.rmi.server.*;
public class ProductClient {
public static void main(String[] args) {
System.setSecurityManager(new RMISecurityManager());
String url="rmi://121.250.216.101:1099/";
try
{
Product c1=(Product)Naming.lookup(url+"toma");
Product c2=(Product)Naming.lookup(url+"tud");
System.out.println(c1.getDescription());
System.out.println(c2.getDescription());
}
catch(Exception e)
{
System.out.println("客戶端程序出現了錯誤: "+e.getMessage());
}
}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章