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());
}
}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章