一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

java?rmi?入門實(shí)例

 gideshi 2012-12-18
   java rmi即java遠(yuǎn)程接口調(diào)用,實(shí)現(xiàn)了2臺(tái)虛擬機(jī)之間的程序調(diào)用,這樣,網(wǎng)絡(luò)上的任何兩臺(tái)計(jì)算機(jī)就可以相互調(diào)用對(duì)方的程序(如果允許)。
    好了,下面就以經(jīng)典的 Hello world作為例子講解。開發(fā)rmi的步驟如下。
1、編寫遠(yuǎn)程接口,遠(yuǎn)程接口實(shí)現(xiàn)類
2、編譯
3、生成接口實(shí)現(xiàn)類存根
4、在服務(wù)器端啟動(dòng)rmiregistry命令
5、在服務(wù)端注冊(cè)發(fā)布遠(yuǎn)程對(duì)象
6、在客戶端獲取遠(yuǎn)程對(duì)象

實(shí)例:
以下遠(yuǎn)程接口類為HelloRemote,實(shí)現(xiàn)類為HelloImpl,服務(wù)器端的發(fā)布類為RMIServer,客戶端的調(diào)用類為RMIClient,為簡(jiǎn)單考慮,服務(wù)器和客戶端均在同一臺(tái)機(jī)器(所謂服務(wù)器和客戶機(jī),是兩者運(yùn)行在2個(gè)虛擬機(jī)進(jìn)程下)。
一、編寫類
1、遠(yuǎn)程接口類,需基礎(chǔ)java.rmi.Remote接口,且方法拋出RMIException

public interface HelloRemote extends Remote{
public void sayHello() throws RemoteException;   
}
2、遠(yuǎn)程接口實(shí)現(xiàn)類,需繼承UnicastRemoteObject

public class HelloImpl extends UnicastRemoteObject  implements HelloRemote{
public HelloImpl() throws RemoteException {
super();
}
public void sayHello() throws RemoteException {
System.out.println("Hello World!");
}
}
3、服務(wù)端類
服務(wù)端類用于發(fā)布遠(yuǎn)程對(duì)象
public class RMIServer {
public static void main(String[] args) throws RemoteException, MalformedURLException {

HelloRemote hello=new HelloImpl();
Naming.rebind("hello", hello);
}
}
4、客戶端類

public class RMIClient {
public static void main(String args[]) throws MalformedURLException, RemoteException, NotBoundException{
                           System.setSecurityManager(new   RMISecurityManager());//如果服務(wù)器和客戶端不再同一臺(tái)機(jī)器要加這行
HelloRemote hello=(HelloRemote) Naming.lookup("hello");
   hello.sayHello();
}
}
遠(yuǎn)程接口類需同時(shí)在服務(wù)端和客戶端存在
二、編譯(注意以上類都沒有包,這里主要是簡(jiǎn)化操作考慮)
客戶端文件夾在 E:/client(簡(jiǎn)稱client),服務(wù)端在E:/server(簡(jiǎn)稱server)
分別編譯以上4個(gè)文件。然后將Hello.class分別放到client和server下,將Client.class放到client下,Server.class放到server下,HelloImpl.class文件放到server文件夾下
三、生成存根和骨架
進(jìn)入server文件夾在命令行下輸入命令 rmic HelloImpl,將生成一個(gè)HelloImpl_Stub.class文件
將此文件復(fù)制到client目錄下(server與client均該文件)

四、運(yùn)行注冊(cè)程序
在命令行中進(jìn)入server文件夾 輸入命令 rmiregistry,用于啟動(dòng)注冊(cè),在此前需設(shè)置classpath為E:/server,輸入rmiregistry命令后將在server文件夾下生成一個(gè)

五、運(yùn)行服務(wù)類
java Server
六、運(yùn)行客戶類
java Client
你將看到執(zhí)行成功。

當(dāng)你執(zhí)行不順利時(shí),請(qǐng)看看下面:
1、最終執(zhí)行時(shí)要3個(gè)命令行窗口,一個(gè)運(yùn)行rmiregistry,一個(gè)運(yùn)行Server,一個(gè)運(yùn)行Clinet,先執(zhí)行rmiregistry命令,接著執(zhí)行java Server,最后執(zhí)行java Client
2、客戶端和服務(wù)端均要有存根(HelloImpl_Stub.class)和遠(yuǎn)程接口的定義,且包名要一致。
3、當(dāng)運(yùn)行服務(wù)器時(shí),提示找不到HelloImpl_Stub,那是你沒指定類路徑,那請(qǐng)你在執(zhí)行rmiregistry前設(shè)置classpath
4、出現(xiàn)AscessableException訪問非法時(shí),需要修改此略文件,在jre/security目錄下的java.policy文件中(如果你有多個(gè)jre,你無法確定是哪個(gè)。那就全部修改吧),在該文件中添加如下內(nèi)容
grant {
           permission java.net.SocketPermission "*:1024-65535",
                "connect,accept";
           permission java.net.SocketPermission "*:80","connect";
        };

5、指定端口,默認(rèn)是1099,可以在運(yùn)行rmiregistry時(shí)指定 如 rmiregistry 1098,也可以在Server.java中指定,如Registry.createRegistry(1088).

6、綁定地址的設(shè)置
簡(jiǎn)單形式Naming.bind("hello"),本機(jī)地址時(shí)才可以
完全形式Naming.bind("rmi://117.45.220.11:1099/RMI_Hello")

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多

    日韩精品在线观看完整版| 微拍一区二区三区福利| 日韩精品在线观看完整版| 激情偷拍一区二区三区视频| 五月婷婷六月丁香在线观看| 欧美人与动牲交a精品| 国产一区二区三区丝袜不卡| 99香蕉精品视频国产版| 欧洲自拍偷拍一区二区| 少妇人妻一级片一区二区三区| 国产精品午夜小视频观看| 日韩黄色一级片免费收看| 久久福利视频视频一区二区 | 欧美丰满人妻少妇精品| 99久久免费中文字幕| 国产91人妻精品一区二区三区| 欧美大粗爽一区二区三区 | 亚洲中文字幕人妻av| 熟女白浆精品一区二区| 黄色av尤物白丝在线播放网址| 99久久精品免费看国产高清| 在线观看免费无遮挡大尺度视频| 中文字幕乱子论一区二区三区 | 日韩一区二区三区久久| 扒开腿狂躁女人爽出白浆av| 日韩免费av一区二区三区| 欧美人妻一区二区三区| 精品久久综合日本欧美| 免费性欧美重口味黄色| 一本久道久久综合中文字幕| 美国女大兵激情豪放视频播放| 国产欧美日产久久婷婷| 亚洲欧美日本国产不卡| 亚洲精品中文字幕一二三| 国产欧美日产久久婷婷| 欧美偷拍一区二区三区四区| 一区二区三区亚洲国产| 欧美午夜色视频国产精品| 国产精品99一区二区三区| 久热久热精品视频在线观看| 久久这里只精品免费福利|