rmi的角色rmi的运行原理在rmi编程应用中要引入哪些个包?permits什么意思

:暂无数据 2026-06-22 08:40:01 :0

rmi的角色rmi的运行原理在rmi编程应用中要引入哪些个包?permits什么意思

本篇文章给大家谈谈rmi,以及rmi的角色rmi的运行原理在rmi编程应用中要引入哪些个包对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录

rmi的角色rmi的运行原理在rmi编程应用中要引入哪些个包

 简介

  RMI是远程方法调用的简称,象其名称暗示的那样,它能够帮助我们查找并执行远程对象的方法。通俗地说,远程调用就象将一个class放在A机器上,然后在B机器中调用这个class的方法。

  我个人认为,尽管RMI不是唯一的企业级远程对象访问方案,但它却是最容易实现的。与能够使不同编程语言开发的CORBA不同的是,RMI是一种纯Java解决方案。在RMI中,程序的所有部分都由Java编写。

  在看本篇文章时,我假定读者都已经具备了较扎实的Java基础知识,在这方面有欠缺的读者请自行阅读有关资料。

  概念

  我在前面已经提到,RMI是一种远程方法调用机制,其过程对于最终用户是透明的:在进行现场演示时,如果我不说它使用了RNI,其他人不可能知道调用的方法存储在其他机器上。当然了,二台机器上必须都安装有Java虚拟机(JVM)。

  其他机器需要调用的对象必须被导出到远程注册服务器,这样才能被其他机器调用。因此,如果机器A要调用机器B上的方法,则机器B必须将该对象导出到其远程注册服务器。注册服务器是服务器上运行的一种服务,它帮助客户端远程地查找和访问服务器上的对象。一个对象只有导出来后,然后才能实现RMI包中的远程接口。例如,如果想使机器A中的Xyz对象能够被远程调用,它就必须实现远程接口。

  RMI需要使用占位程序和框架,占位程序在客户端,框架在服务器端。在调用远程方法时,我们无需直接面对存储有该方法的机器。

  在进行数据通讯前,还必须做一些准备工作。占位程序就象客户端机器上的一个本机对象,它就象服务器上的对象的代理,向客户端提供能够被服务器调用的方法。然后,Stub就会向服务器端的Skeleton发送方法调用,Skeleton就会在服务器端执行接收到的方法。

  Stub和Skeleton之间通过远程调用层进行相互通讯,远程调用层遵循TCP/IP协议收发数据。下面我们来大致了解一种称为为“绑定”的技术。

  客户端无论何时要调用服务器端的对象,你可曾想过他是如何告诉服务器他想创建什么样的对象吗?这正是“绑定”的的用武之地。在服务器端,我们将一个字符串变量与一个对象联系在一起(可以通过方法来实现),客户端通过将那个字符串传递给服务器来告诉服务器它要创建的对象,这样服务器就可以准确地知道客户端需要使用哪一个对象了。所有这些字符串和对象都存储在的远程注册服务器中。

  在编程中需要解决的问题

  在研究代码之前,我们来看看必须编写哪些代码:

  ·远程对象:这个接口只定义了一个方法。我们应当明白的是,这个接口并非总是不包括方法的代码而只包括方法的定义。远程对象包含要导出的每个方法的定义,它还实现Java.rmi中的远程接口。

  ·远程对象实现:这是一个实现远程对象的类。如果实现了远程对象,就能够覆盖该对象中的所有方法,因此,远程对象的实现类将真正包含我们希望导出的方法的代码。

  ·远程服务器:这是一个作为服务器使用的类,它是相对于要访问远程方法的客户端而言的。它存储着绑定的字符串和对象。

  ·远程客户端:这是一个帮助我们访问远程方法提供帮助的类,它也是最终用户。我们将使用查找和调用远程方法的方法在该类中调用远程方法。
  编程

  我们将首先编写远程对象,并将代码保存为名字为AddServer.Java的文件:

import Java.rmi.*;

public interface AddServer extends Remote {

public int AddNumbers(int firstnumber,int secondnumber) throws RemoteException;

}

  我们来看看上面的代码。首先,为了使用其内容,我们导入rmi包。然后,我们创建一个扩展了Java.rmi中远程接口的接口。所有的远程对象必须扩展该远程接口,我们将该远程接口称为AddServer。在该远程对象中,有一个名字为AddNumbers的方法,客户端可以调用这一方法。我们必须记住的是,所有的远程方法都需要启动RemoteException方法,有错误发生时就会调用该方法。

  下面我们开始编写远程对象的实现。这是一个实现远程对象并包含有所有方法代码的类,将下面的代码保存为名字为AddServerImpl.Java的文件:

import Java.rmi.*;

public class AddServerImpl extends UnicastRemoteObject implements AddServer {
public AddServerImpl() {
super();
}
public int AddNumbers(int firstnumber,int secondnumber) throws RemoteException {
return firstnumber + secondnumber;
}
}
  首先,我们导入rmi包,然后创建一个扩展UnicastRemoteObject和实现创建的远程对象的类;其次,我们可以为类创建一个缺省的构建器。我们还了解了AddNumbers方法的代码,它启动RemoteException。这样我们就覆盖了创建的远程对象中的方法。AddNumbers方法的代码非常好理解,它接受2个整型参数,然后相加并返回它们的和。

  至此,我们已经有了二个Java文件:远程对象和远程对象的实现。下面我们将使用Javac命令编译这二个文件:

  编译远程对象:

C:\jdk\bin\Javac workingdir\AddServer.Java
  编译远程对象实现:

C:\jdk\bin\Javac workingdir\AddServerImpl.Java
  这样,就会达到二个Java文件和二个类文件,下面我们将创建stub和skeleton。为了创建stub和skeleton文件,我们必须使用rmic编译器编译远程对象实现文件。

  用Rmic编译远程对象实现文件:

C:\jdk\bin\rmic workingdir\AddServerImpl.Java
  然后,我们就会发现多了2个新建的类文件,它们分别是AddServerImpl_Stub.class 和AddServerImpl_Skel.class 。

  The Coding (Contd.)

  我们已经编译了所有的源代码,下面我们来创建客户端和服务器端,将下面的代码保存为名字为RmiServer.Java的文件:

import Java.rmi.*;
import Java.net.*;

public class RmiServer {
public static void main (String args) throws RemoteException, MalformedURLException {
AddServerImpl add = new AddServerImpl();
Naming.rebind(“addnumbers“,add);
}
}

  首先,我们导入Java.rmi包和Java.net包。另外,我们还使用throws从句捕获任何异常。我们从对象中得出远程对象实现,使用rebind方法将字符串addnumbers与该对象绑定。下面的例子显示了绑定的含义:
从现在开始,无论何时客户端要调用远程对象,使用字符串addnumbers就可以实现。rebind方法有二个参数:第一个参数是字符串变量,第二个参数是远程对象实现类的对象。

  下面我们来创建客户端,将下面的代码保存为名字为RmiClient.Java的文件:

import Java.rmi.*;
import Java.net.*;

public class RmiClient {
public static void main(String args) throws RemoteException, MalformedURLException {
String url=“rmi://127.0.0.1/addnumbers“;
AddServer add;
add = (AddServer)Naming.lookup(url);
int result = add.AddNumbers(10,5);
System.out.println(result);
}
}

  首先,我们导入Java.rmi包和Java.net包,并使用throws从句捕获所有必要的异常。然后通过利用Naming类中的静态lookup方法从远程对象中得到一个对象。(这也是我们无需从Naming类中得到一个对象并调用它。而只使用类名字的原因。)

  lookup方法接受远程对象的完整的URL名字,该URL由完整的机器IP地址以及与对象绑定的字符串(也誻对象的绑定名)组成。在调用远程对象时,我们使用了RMI协议。lookup方法向我们返回一个对象,在能够使用它前,我们必须将它的数据类型转换为与远程对象的数据类型一致。

Since we have both our server and client source ready, let’s compile them both:
  至此,我们已经有了服务器端和客户端的源代码,下面我们来编译这二个源文件:

  编译远程服务器:

C:\jdk\bin\Javac workingdir\RmiServer.Java
  编译远程客户端:

C:\jdk\bin\Javac workingdir\RmiClient.Java
  在对我们的代码进行测试前,还必须首先启动RMI Registry。RMI Registry存储有所有绑定的数据,没有它,RMI就不能正常地运行!

  启动Rmi Registry服务器:

C:\jdk\bin\start rmiregistry
  我们会注意到,这时会出现一个空白的DOS提示符窗口,这表明Rmi Registry服务器在运行,注意不要关闭该窗口。然后,我们首先在一个DOS提示符窗口中运行Rmi服务器,然后在另一个DOS提示符窗口中运行Rmi客户端。

  启动RMI服务器:
C:\jdk\bin\Java workingdir\RmiServer
  启动RMI客户端:

C:\jdk\bin\Java workingdir\RmiClient
  如果一切正常,我们应该能够得到15这个输出。我们向AddNumbers方法输入10和5二个数字,该方法将这二者加起来,并将其和15返回给我们。如果得到了15这个输出,说明我们已经成功地执行了一个远程方法。当然,在这里,我们并没有执行真正意义上的远程方法,因为我们的计算机既是服务器,又是客户机。如果有计算机网络,我们就可以方便地进行执行远程方法的试验了。

permits什么意思

做动词 及物 1.允许,许可,准许;2.(不用被动式,常用物做主语)允许,容许
不及物动词 1.允许,容许[(+of)]
做名词 1.许可证,执照[C]
2.允许,许可

为什么TerminateProcess不能结束进程

STARTUPINFO StartupInfo;//定义STARTUPINFO结构指针
memset(&StartupInfo,0,sizeof(STARTUPINFO));
StartupInfo.cb = sizeof(STARTUPINFO);
StartupInfo.dwFlags=STARTF_USESHOWWINDOW;
StartupInfo.wShowWindow=SW_SHOW;
PROCESS_INFORMATION ProcessInfo;
if (!CreateProcess(“D:\\Program Files\\Fluent.Inc\\ntbin\\ntx86\\gambit.exe“ ,
cmdline.GetBuffer(cmdline.GetLength()),NULL,NULL,FALSE,0,NULL,“E:\\zuoye\\gambit1“,&StartupInfo,&ProcessInfo)){cout《《“Create Fail!“《《endl;exit(1);}else{cout《《“success!“《《endl;} class=“baidu-highlight“ waitforsingleobject(processinfo.hprocess,infinite);}void=““ main(){gambit();handle=““ han=“CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);“ 取进程快照
PROCESSENTRY32 lpp;
lpp.dwSize=sizeof(PROCESSENTRY32);BOOL bo;bo=Process32First(han,&lpp); //从快照里取第一个进程信息
TCHAR *str1;while(bo){str1=lpp.szExeFile ;
if(!strcmp(str1,“exceed.exe“) || !strcmp(str1,“gambit.exe“)){HANDLE han2=OpenProcess(1,TRUE,lpp.th32ProcessID); //取进程实例 PROCESS_TERMINATE
//cout《

terminal services是什么在win7里面怎么禁用

如果是服务器,Terminal Services 是MS提供的远程管理服务。如果还想使用可修改注册表吧3389口随便换个就可以了。如果不用,直接把注册表内Terminal Services服务相关简直删了。

操作步骤如下:
1、点击开始,点击运行,输入services.msc,点击确定;
2、服务列表找到并双击TERMINAL SERVICES并双击;
3、弹出对话框,修改启动类型为禁用,点击确定,然后重启计算机即可。

关於determine和decision

decide指经过考虑或讨论研究,打定主意,结束踌躇,疑惑,争论等情况。
例如,We decided not to go。我们决定不去了。

determine指经过认真讨论之后下定决心。
例如,He has determined to learn English。

decide一般上在口语上用,determine较正式在文学作品中出现。
同一句最好不要一起用。

determine的形容词形式是determined,不好意思,我还没有见过determinable
例如,She’s very determined.她很有决心。

decisive 意为决定性的,果断的,从此可以看出它和determined区别
例如,a decisive reply一个坚定的答复。

terminal是什么意思及反义词

terminal
英 [’tɜːmɪn(ə)l]
美 [tɝmənl]

n. 末端;终点;终端机;极限
adj. 末端的;终点的;晚期的

出现 permission denied怎么办

一、表面上看是因为权限不足,因此可以通过对usr文件夹进行授权的方式解决:   zhengxiangwen@10:~$sudo chmod -R 777 usr   其中   -R 是指级联应用到目录里的所有子目录和文件   777 是所有用户都拥有最高权限   二、但上面的解决方法只是治标不治本,其实我们需要以管理员的身份进入系统,才能畅通无阻   那么问题来了,怎么样才能以管理员的身份进入系统呢,往下看:   Ubuntu安装好后,root初始密码(默认密码)不知道,需要设置。   1、先用安装Ubuntu的时候创建的用户登录到系统;   2、然后输入命令:sudo passwd 摁回车;   3、接下来会提示您:输入新密码,重复输入密码,最后提示您passwd:password updated sucessfully;   此时已完成root密码的设置。   4、接着就可以输入命令:su root;   即以root的身份登录到系统里面去了,此时你再拷贝文件,就可以了。   以上就是Ubuntu复制文件时出现Permission denied错误提示的解决方法了,只要按照上面的步骤设置root密码后以root身份登录,就可以正常复制文件了。

Permission denied 这个错误怎么解决

bash 说明你本机的shell是bash 但 脚本开头声明的shell解释器是 /bin/csh, 因此报错“找不到解释器”,bad interpreter。 另外,Permission denied这个错误,可能是没有赋予脚本可执行权限。 需要先 chmod +x ./sh_ext_ztd.ztd 给脚本可执行权限

intermission

现在还有,但实际意义不知何过去是否一样了,也许是对曾经的一种回忆吧,想今年的印度电影《大玩家》,中间就出现intermisson.此电影还是值得一看的。

permission denied问题怎么解决

-bash 说明你本机的shell是bash 但 脚本开头声明的shell解释器是 /bin/csh, 因此报错“找不到解释器”,bad interpreter。 另外,Permission denied这个错误,可能是没有赋予脚本可执行权限。 需要先 chmod +x ./sh_ext_ztd.ztd 给脚本可执行权限

文章分享结束,rmi和rmi的角色rmi的运行原理在rmi编程应用中要引入哪些个包的答案你都知道了吗?欢迎再次光临本站哦!

rmi的角色rmi的运行原理在rmi编程应用中要引入哪些个包?permits什么意思

本文编辑:admin
: rmi

本文相关文章:


rmi是什么?什么是 rmi

rmi是什么?什么是 rmi

今天给各位分享rmi是什么的知识,其中也会对rmi是什么进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

2026年9月20日 02:10

更多文章:


majority of(the majority of 和 a majority of的区别以及用法例句)

majority of(the majority of 和 a majority of的区别以及用法例句)

这篇文章给大家聊聊关于majority of,以及the majority of 和 a majority of的区别以及用法例句对应的知识点,希望对各位有所帮助,不要忘了收藏本站哦。

2026年10月11日 07:40

汉字机内码查询表(1个汉字的机内码是几位谢谢)

汉字机内码查询表(1个汉字的机内码是几位谢谢)

大家好,关于汉字机内码查询表很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于1个汉字的机内码是几位谢谢的知识点,相信应该可以解决大家的一些困惑和问题,如果碰巧可以解决您的问题,还望关注下本站哦,希望对各位有所帮助!

2026年10月11日 07:20

promote翻译(英语翻译倡导怎么说)

promote翻译(英语翻译倡导怎么说)

其实promote翻译的问题并不复杂,但是又很多的朋友都不太了解英语翻译倡导怎么说,因此呢,今天小编就来为大家分享promote翻译的一些知识,希望可以帮助到大家,下面我们一起来看看这个问题的分析吧!

2026年10月11日 06:30

用手机如何导航?开车用手机导航哪个软件最好

用手机如何导航?开车用手机导航哪个软件最好

今天给各位分享用手机如何导航的知识,其中也会对用手机如何导航进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

2026年10月11日 06:20

多线程技术有什么用(多线程有什么作用)

多线程技术有什么用(多线程有什么作用)

其实多线程技术有什么用的问题并不复杂,但是又很多的朋友都不太了解多线程有什么作用,因此呢,今天小编就来为大家分享多线程技术有什么用的一些知识,希望可以帮助到大家,下面我们一起来看看这个问题的分析吧!

2026年10月11日 05:40

another time(another time和other time的区别)

another time(another time和other time的区别)

大家好,another time相信很多的网友都不是很明白,包括another time和other time的区别也是一样,不过没有关系,接下来就来为大家分享关于another time和another time和other time的区

2026年10月11日 05:00

java开发工具包jdk(JDK是什么意思)

java开发工具包jdk(JDK是什么意思)

其实java开发工具包jdk的问题并不复杂,但是又很多的朋友都不太了解JDK是什么意思,因此呢,今天小编就来为大家分享java开发工具包jdk的一些知识,希望可以帮助到大家,下面我们一起来看看这个问题的分析吧!

2026年10月11日 04:50

mysql 命令(MySQL的基本命令)

mysql 命令(MySQL的基本命令)

大家好,如果您还对mysql 命令不太了解,没有关系,今天就由本站为大家分享mysql 命令的知识,包括MySQL的基本命令的问题都会给大家分析到,还望可以解决大家的问题,下面我们就开始吧!

2026年10月11日 03:00

手机云备份是什么意思?手机上的云备份有什么用 怎么用呢

手机云备份是什么意思?手机上的云备份有什么用 怎么用呢

各位老铁们,大家好,今天由我来为大家分享云备份,以及手机云备份是什么意思的相关问题知识,希望对大家有所帮助。如果可以帮助到大家,还望关注收藏下本站,您的支持是我们最大的动力,谢谢大家了哈,下面我们开始吧!

2026年10月11日 02:40

java遍历map的key(java Map 怎么遍历)

java遍历map的key(java Map 怎么遍历)

大家好,java遍历map的key相信很多的网友都不是很明白,包括java Map 怎么遍历也是一样,不过没有关系,接下来就来为大家分享关于java遍历map的key和java Map 怎么遍历的一些知识点,大家可以关注收藏,免得下次来找不

2026年10月11日 02:20

最近更新

majority of(the majority of 和 a majority of的区别以及用法例句)
2026-10-11 07:40:02 浏览:0
promote翻译(英语翻译倡导怎么说)
2026-10-11 06:30:03 浏览:0
热门文章

标签列表