RMI技术开发网络聊天室

来源:互联网 发布:淘宝网韩版女装新款 编辑:程序博客网 时间:2024/04/30 09:39

 

1.要求

  了解Java远程方法调用RMI(Remote Method Invocation)的实现原理以及RMI应用的开发步骤,并使用RMI来实现网络聊天室,客户端使用Java Applet实现。

2.结果演示

  启动服务器程序后,运行客户端程序结果如下:

  使用方法是在“你的名字:”文本框中填入名字或昵称,点击“连接”按钮,在“断开”按钮下的状态提示标题栏中就会提示“连接状态:已连接”,如果有问题连接失败的话就会在下方的文本域中显示“连接失败…”。如果有多个用户与服务器成功连接的话,此时就可以在“信息输入框”中输入要发送的消息并点击“发送”按钮。

 

   上图演示了三个用户成功连接服务器后的聊天实录,当一个用户发送一条消息后,服务器负责向每个用户广播此消息,当有新用户进入或有用户推出,服务器都向每个用户发送提示消息。

在JBuilder中运行整个工程<点击“在JBuilder中运行整个工程”,在出现的“文件下载”对话框中选择“打开(O)”按钮>。

3.实例分析

  RMI能让一个Java程序调用网络中另外一台计算机的Java对象的方法,效果就像这个远程计算机上的对象方法在本地机上一样。

  该示例中定义了两个接口,IChatClient接口定义了每个客户端都要提供的远程方法。聊天服务器利用 getName()从客户获得客户名,利用sendMessage () 方法广播新加入聊天者。而IChatService 接口定义了三个方法,客户登录后可以调用sendMessage () 方法将消息发送给所有当前的用户;登录客户利用addCient()加入聊天室,利用removeClient()向所有已进入的聊天者广播退出者。远程接口IchatService实现类ChatService,ChatService 类继承了UnicastRemoteObject,实现了接口IChatService。服务程序ChatServer设置安全管理,构造服务对象,并把它与名”IChatService”绑定。客户端ChatClientApplet类继承Applet类,实现IChatClient和,ActionListener(监听器)接口。提供了客户端用户界面,用来显示聊天内容和提供用户消息输入框,连接服务器和断开服务器。

4.源程序

 >>1. IChatClient 接口

   IChatClient接口定义了每个客户端都要提供的远程方法。聊天服务器利用 getName()从客户获得客户名,利用sendMessage () 方法广播新加入聊天者。

 

 >>2. IChatService 接口

   IChatService 接口定义了三个方法,客户登录后可以调用sendMessage () 方法将消息发送给所有当前的用户;登录客户利用addCient()加入聊天室,利用removeClient()向所有已进入的聊天者广播退出者。

 >>3.远程接口IchatService实现类ChatService

   ChatService 类继承了UnicastRemoteObject,实现了接口IChatService。

 >>4.服务程序ChatServer

   服务程序ChatServer设置安全管理,构造服务对象,并把它与名”IChatService”绑定。

 >>5.客户端程序ChatClientApplet

   ChatClientApplet类继承Applet类,实现IChatClient和,ActionListener(监听器)接口。提供了客户端用户界面,用来显示聊天内容和提供用户消息输入框,连接服务器和断开服务器。

5.开发步骤

  打开Jbuilder开发环境


  新建工程,点击菜单栏的“File……New Project…”将出现如下新建工程向导对话框:

 

 

 修改完工程名和工程保存目录后,点击“Finish”按钮即进入开发环境界面,且左端工程视窗中显示了工程“ChatRMI0.jax”

  现在就是要新建类文件了,本示例的工程共包括5个文件,两个Interface接口类文件IchatClient和IChatService、两个普通类文件ChatService和ChatServer、一个Applet类文件ChatClient。
  新建接口类文件的方法如下:
>>>1. 选择工具栏上的“新建”按钮或选择菜单栏的“File……New…”,将出现如下对话框:

>>>2. 选择“General”面板上的“Interface”,在出现的新建接口类向导对话框中修改接口类名,点击“OK”按钮即可。

  新建普通类文件的方法如下:
>>>1. 选择工具栏上的“新建”按钮或选择菜单栏的“File……New…”,将出现如下对话框:

>>>2. 选择“General”面板上的“Class”,在出现的新建类向导对话框中修改类名,点击“OK”按钮即可。

  新建以上类后要修改初始源程序为本例提供的源程序。
  下面就示要新建客户端类文件了,本例的客户端用的是Java Applet,当然也可使用Jframe等其他种类的界面设计方法。
设计过程如下所示:
>>>1. 选择工具栏上的“新建”按钮或选择菜单栏的“File……New…”,将出现如下对话框:

>>>2.选择“Web”面板上的“Applet”,在出现的新建Applet类向导对话框中修改Applet类名,点击“Finish”按钮即可。

>>>3. 在出现如下开发环境窗口时,选择工程视窗中的“ChatClientApplet.java”,然后选择文件视窗标签中的“Design”。

>>>4. 进入可视化内容设计窗口,添加相应组件。

>>>5. 添加完组件后,界面如下所示:

>>>6. 添加代码

 

到现在所用代码就全部添加完毕了,下面就是要进行相关设置,如添加安全策略文件等。
(1)设置生成生成 ChatService_Stub.class,选择要设置的类,右键选择下拉菜单中的“Properties …”

  在出现如上所示的对话框1中选上红线框标识的“Generate RMI stub/skeleton”选项,再点击对话框1中蓝色圈标识的按钮,将出现对话框2,初始单选框为第二个,现在要修改为第一个“Java 2 only”选项,然后点击“OK”按钮完成设置。这样在编译时就会自动生成ChatService_Stub.class文件,同样ChatClientApplet也需生成相应的ChatClientApplet_Stub.class文件,故也要进行相关设置。

(2)编辑安全策略文件,内容如下,保存是要以“ .policy”为后缀
grant {
permission java.net.SocketPermission "*:1024-65535", "accept, connect, listen, resolve";
permission java.security.AllPermission ;
};
(3)设置添加安全策略文件,如本例中的类ChatService使用了接口IChatClient,添加步骤如下:
选择菜单栏中的“Project”,在下拉菜单中选择下图中用粗红圈标识的“Project Properties …”

  在出现的对话框1中选择“Run面板”,再选择红圈标识的“New…”按钮(蓝色圈标识的是“Edit”按钮,是要修改参数设置时用的),将出现如下所示对话框1,在此对话框中添加主类,方法时点击蓝色圈标识的按钮将出项对话框2,搜索并选择一下要添加的主类,然后在对话框1中的“VM parameters”文本框中加入相关参数。

  ChatServer的参数为:-Djava.security.policy=file:g:/Java/ChatRMI0/mypolicy.policy -Djava.rmi.server.codebase=file:g:/Java/ChatRMI0/classes/ chatrmi0.ChatServer,其中红色标记的文字使策略文件的存放路径,蓝色标记的文字是主类的存放路径。


  下面即可运行程序,先编译整个工程,然后启动RMI服务器,方法是选择菜单栏的“Tool”,在下拉菜单中选择红圈标识的RMIRegistry选项即可启动RMI服务器。

    然后运行服务器端程序,选择工程视窗中的类ChatServer,右键在下拉菜单中选择如下图用红圈标识的“Run using ‘chatserver’”选项,即可启动服务器端程序。

  最后启动客户端程序,选择工程视窗中的ChatClientApplet.html,右键在下拉菜单中选择如下图用蓝圈标识的“Run using defaults”选项,即可启动客户端程序。

  这样就会出现前面“结果演示”部分出现的结果。

原创粉丝点击