/********************************************************************************
* 运行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());
}
}
}
分享到:
相关推荐
1、 一个服务器生成时间,并在多个不同节点的客户端上显示。 2、 客户端有多种时间显示方式,如模拟时钟、数字时钟。 1.2 作业要求 下面是设计时需要满足的四个要求: 1、 打破客户端和服务器开发过程中的紧耦合...
简单的一个java RMI的实例,可以把代码在不同的机器上运行,一台启动server,一台运行Client,需要修改代码IP。也可以直接一台机器运行。结果只是简单的打印字符。
这是RMI开发的实例,动态注册和静态注册,已经在两台不同的机器上运行过
java RMI的一个实例,利用Eclipse开发的简单的银行存取款小程序,运行时需要启动java注册服务rmiregister,然后在两个命令行窗口分别运行服务器类和客户端类,支持局域网内不同机器间的访问
也就是你的windows系列机器如果之前没有运行过RMI服务端应用,那么当你第一次运行之后,如果你关闭它,那么可能再也不能注册运行了。我还不知道rmi API为什么为这样。不过,成功一次之后,对于理解EJB应用的生命是...
Java RMI 远程调用实例,各个文件的作用: DISPLAYPERFECTTIME.JAVA|:向rmiregistry查找PerfectTime对象,定义调用远程对象的方法。 PERFECTTIME.JAVA:向RMI注册服务,以便客户端查找,创建提供注册服务的本地...
运行代码: 如果在同一台机器上运行您将需要 3 个终端(1 个用于服务器,2 个用于玩家#1 和玩家#2) 对于服务器: 提示$ rmiregistry & prompt$ java ServerImplementation 对于玩家#1: prompt$ java ...
jmeter运行(本地运行+远程运行)远程运行是用一台Jmeter控制机控制远程的多台机器来产生负载。控制机与负载机之间通过RMI方式来完成通信
Java远程方法调用是一种分布式系统技术。它允许一个java虚拟机调用运行在网络中另一个地方的JVM上的对象方法. 这种技术对开发大型系统尤为重要,因为它使得在多台机器上分布资源和处理负载的想法成为可能。
而且你要在你的机器上使用基于HTTP的COM对象就必须为RPC-通讯打开防火墙的几个端口. 对于RMI,RMI是针对Java的. Borland从来没有提供和RMI通讯的工具.就算有这种工具,你还是不能和COM对象通讯. 而SOAP呢?它是唯一的...
1 slave机器的自定义端口号配置; 2 负载机(Slave)找不到参数文; 3 无数据,依赖文件报错的问题; 4 Server failed to start: java.rmi.server.ExportException: Listen failed on port…找不到指定文件; 5 ...
要做到这一点,应用程序开发人员必须使用如微 软的分布式组件对象模型(DCOM),通用对象请求代理体系结构(CORBA),Java远程方法调用(RMI)等技术。然而,这些分布的技术通过已开发的应用程序编程语言非常紧密地...
1. 我的jmeter版本是 apache-jmeter-5.1,在 agent 机器上需要修改配置 jmeter.properties,修改以下两处配置:1)找到 server_port 去掉 #,设置端口 。 2)找到server.rmi.ssl.disable=false 改成 true
ant runComputer(在服务器机器上) ant runEClient(或 runMClient,在客户端机器上运行) 要使客户端连接到 'localhost' 以外的服务器,请在如下所示的行中修改 'build.xml' 参数值=“本地主机” 将服务器的 ...
2.2 跨平台性 Java 语言的第二个特性就是跨平台性[4],也就是说使用 Java 语言编写的程序可以在编 2 译后不用经过任何更改,就能在任何硬件设备条件下运行。这个特性经常被称为"一次编 译,到处运行" 。执行 Java ...
如果在你的机器上出现某种声音格式不能播放的情景(有的机器对于MP3文件会出现这种情况),请打开你的Windows Media Player,设置与相应的文件格式关联(其实就是更改一下注册表中的文件关联),然后就可以在闹钟中...
但它打算更容易使用,并能够在很短的时间内收集大量机器。 它完全用java编写,避免调用外部进程来提高性能。 它使用 ,它是用 java 编写的的克隆。 该网站是 这个怎么运作? JRDS 是一个 Java Web 应用程序,可以...
名字的可见度以及使用来自其他库的组件;static关键字;注释和嵌入文档等等。 <br>(3) 第3章:控制程序流程 本章开始介绍起源于C和C++,由Java继承的所有运算符。除此以外,还要学习运算符一些不易使人注意的...
当前处于运行状态的数据保存在内存中,机器只对内存供电,而硬盘、屏幕和CPU等部件则停止供电。 由于数据存储在速度快的内存中,因此进入等待状态和唤醒的速度比较快。 不过这些数据是保存在内存中,如果断电则会...