老熟女激烈的高潮_日韩一级黄色录像_亚洲1区2区3区视频_精品少妇一区二区三区在线播放_国产欧美日产久久_午夜福利精品导航凹凸

重慶分公司,新征程啟航

為企業提供網站建設、域名注冊、服務器等服務

在Java中實現遠程方法調用(轉)

在Java中實現遠程方法調用(轉)[@more@]一、Java中的遠程方法調用

遠程方法調用(Remote Method Invocation, RMI)是Java1.1引入的分布式對象軟件包,它的出現簡化了在多臺機器上的Java應用之間的通信。相比CORBA,RMI功能較弱且只能用于Java系統。

二、實現一個簡單的RMI

要使用RMI,必須構造四個主要的類:遠程對象的本地接口、RMI客戶、遠程對象實現和RMI服務器。RMI服務器生成遠程對象實現的一個實例,并用一個特殊的URL注冊它,RMI客戶在遠程服務器上查找對象,若找到就把它轉換成本地接口類型,然后像一個本地對象一樣使用它。下面是一個簡單的RMI例子,遠程對象只返回一個消息字符串。要使這個例子更有價值,我們需要做的就是完善遠程對象實現類。

1.遠程對象的本地接口類(Rem.java)

該類僅僅是一個接口,而不是實現,RMI客戶機可以直接使用它,RMI服務器必須通過一個遠程對象來實現它,并用某個URL注冊它的一個實例。

import java.rmi.*;
public interface Rem extends Remote { public String getMessage() throws RemoteException;}


本地接口(Rem)必須是公共的,否則客戶機在加載一個實現該接口的遠程對象時就會出錯。此外,它還必須從java.rmi.Remote繼承而來,接口中的每一個方法都必須拋出遠程異常java.rmi.RemoteException。

2.RMI客戶類(RemClient.java)

RMI客戶使用Naming.lookup在指定的遠程主機上查找對象,若找到就把它轉換成本地接口Rem類型,然后像一個本地對象一樣使用它。與CORBA不同之處在于RMI客戶必須知道提供遠程服務主機的URL,這個URL可以通過rmi://host/path或rmi://host:port/path來指定,如果省略端口號,就使用1099。Naming.lookup可能產生三個異常:RemoteException、NotBoundException、MalformedURLException,三個尋常都需要捕獲。RemoteException、Naming和NotBoundException在java.rmi.*中定義,MalformedURLException在java.net.*中定義。另外,客戶機將向遠程對象傳遞串行化對象Serializable,所以還應在程序中輸入java.io.*。

import java.rmi.*;
import java.net.*;
import java.io.*;
public class RemClient {
public static void main(String[] args) {
try {
String host = (args.length > 0) ? args[0] : "localhost"; //從命令行讀取遠程主機名
//通過URL在遠程主機上查找對象,并把它轉化為本地接口Rem類型
Rem remObject=(Rem)Naming.lookup("rmi://" + host + "/Rem");
System.out.println(remObject.getMessage()); //調用遠程對象的方法
} catch(RemoteException re) {System.out.println("RemoteException: " + re);
} catch(NotBoundException nbe) {System.out.println("NotBoundException: " + nbe);
} catch(MalformedURLException mfe){System.out.println("MalformedURLException:"+ mfe);
}}}
3.遠程對象實現類(RemImpl.java)
這個類真正實現RMI客戶調用的遠程對象,它必須從UnicastRemoteObject繼承,其構造函數應拋出RemoteException異常。
import java.rmi.*;
import java.rmi.server.UnicastRemoteObject;
public class RemImpl extends UnicastRemoteObject implements Rem {
public RemImpl() throws RemoteException {} //構造函數拋出RemoteException異常
public String getMessage() throws RemoteException {
return("Here is a remote message."); }} //向RMI客戶返回一個消息串 4.RMI服務器類(RemServer.java)該類創建遠程對象實現RemImpl的一個實例,然后用一個特定的URL來注冊它,所謂注冊就是通過Naming.bind或Naming.rebind來將RemImpl實例綁定到URL上。 import java.rmi.*; import java.net.*; public class RemServer { public static void main(String[] args) { try { RemImpl localObject = new RemImpl(); //生成遠程對象實現的一個實例 Naming.rebind("rmi:///Rem", localObject); //將遠程對象實例綁定到rmi:///Rem上 }catch(RemoteException re){System.out.println("RemoteException:"+re); }catch(MalformedURLException mfe) {System.out.println("MalformedURLException: "+mfe); }}}

三、編譯和運行

編譯RMI客戶和服務器,這將自動編譯遠程對象的本地接口和遠程對象實現
javac RemClient.java //自動編譯遠程對象的本地接口Rem.java
javac RemServer.java //自動編譯遠程對象實現RemImpl.java
生成客戶承接模塊和服務器框架
rmic RemImpl
這將構造RemImpl_Stub.class和RemImpl_Skeleton.class。請將Rem.class、RemClient.class和RemImpl_Stub.class拷貝到RMI客戶機,將Rem.class、RemImpl.class 、RemServer.class和RemImpl_Skeleton.class拷貝到RMI服務器。
啟動RMI注冊
rmiregistry
//在服務器上執行。不論有多少個遠程對象,本操作只需做一次
運行java RemServer.class
//啟動RMI服務器(在服務器上執行)
java RemClient.class
//啟動RMI客戶,將輸出“Here is a remote message.”
網頁題目:在Java中實現遠程方法調用(轉)
標題來源:http://www.xueling.net.cn/article/isggoe.html

其他資訊

在線咨詢
服務熱線
服務熱線:028-86922220
TOP
主站蜘蛛池模板: 黑人无码在线精品视频 | 成人在线视频一区二区 | 天天av天天翘天天综合网 | 亚洲国产精品无码久久久动漫 | 草草国产 | 91丝袜在线观看 | 久久不见久久见免费影院 | 大地资源在线影视播放 | 欧美精品一区二区视频 | av片国产 | 女人被躁到高潮嗷嗷叫69 | 中文字幕二十三页2 | 国产伦精品一区二区三区免费 | 色偷偷噜噜噜亚洲男人 | 欧美日韩激情视频在线观看 | 国产成人小视频 | 乳色av | 国产精品久久久午夜 | 91探花在线观看 | 97超碰人人草 | 国产成人8x人网站视频 | 亚洲人成网站在线播放2019 | 日韩av成人女同恋 | 国产精品乱伦日本 | 精品一区二区三区免费看 | 午夜影视片 | a级毛片免费全部播放无码 一区二区在线免费观看视频 | 欧美性大战久久久久久久蜜臀 | 亚洲精品乱码中文久久 | 欧美日韩偷拍一区 | 一本色道久久99精品综合 | 欧美成人精品 | a级毛片久久 | 国产做受网站 | 国产日本级久 | 国产精品毛片在线 | 成人网站网址在线观看播放 | 日韩毛片免费无码无毒视频观看 | 内射囯产旡码丰满少妇 | 欧洲精品在线一区 | 最新99热 |