Java RMI Demo

bkjs626發表於2017-12-08

前言

在Java實驗課上碰到一個題目要求寫一個Java RMI 應用,打碼是不難寫,就是eclipse上執行跟命令列編譯總是各種蜜汁錯誤~在此給大家填坑。

題目

這裡寫圖片描述

首先在啟動rmiregistry之前先為介面例項生成Stub類,java8會有下面的警告(畢竟過時了的東西嘛),看了下還是可以生成Stub類就無妨。
這裡寫圖片描述
然後啟動registry服務之後再執行Server。
否則如下:(開啟不成功也會)
這裡寫圖片描述

然後還有。。。服務連線不上開啟客戶端就會如此
這裡寫圖片描述

最可怕的還是找不到類的坑,,,,兩節課基本都卡在那裡,,,,
圖現在是截不到了,,,反正老師ppt裡的程式碼跟ppt裡面的連結那個教程按步驟打的程式碼均 無法執行(心裡一萬個xxx)
(想著反正以後再也不會寫這玩意了!)

最後上圖!

這裡寫圖片描述

需求完成,趕快撤退~

程式碼

介面

import java.rmi.*;

public interface PCinfo extends Remote{
    public String showInfo() throws RemoteException;
}

介面例項

import java.net.InetAddress;
import java.net.UnknownHostException;
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
import java.util.Properties;

public class Info extends UnicastRemoteObject implements PCinfo{

    /**
     * 
     */
    private static final long serialVersionUID = -8178091323074177041L;

    public Info() throws RemoteException {
        super();
    }

    public String showInfo() throws RemoteException {  
        InetAddress addr = null;
        try {
            addr = InetAddress.getLocalHost();
        } catch (UnknownHostException e) {
            e.printStackTrace();
        } 
        String hostName=addr.getHostName().toString(); 
        Properties sysProperty = System.getProperties();
        String systemName = sysProperty.getProperty("os.name");
        return "Server Env: OS of " + hostName + " is " + systemName; 
    }  
}

服務端:

import java.rmi.Naming;


public class InfoServer {
    public static void main(String[] args){
        try{
            Info i = new Info();
            Naming.bind("rmi://localhost:12312/Info", i);
            System.out.println("InfoServer bound in register");
        }catch(Exception e){
            System.out.println("InfoServer err: "+e.getMessage());
            e.printStackTrace();
        }
    }
}

客戶端:


import java.net.MalformedURLException;
import java.rmi.Naming;
import java.rmi.NotBoundException;
import java.rmi.RemoteException;

public class InfoClient {

    public static void main(String[] args) {
        try {  
            PCinfo h = (PCinfo)Naming.lookup("rmi://localhost:12312/Info");  
            System.out.println(h.showInfo());  
        } catch (MalformedURLException e) {  
            System.out.println("url格式異常");  
        } catch (RemoteException e) {  
            System.out.println("建立物件異常");  
            e.printStackTrace();  
        } catch (NotBoundException e) {  
            System.out.println("物件未繫結");  
        }  
    }

}

policy檔案我就不放了,這個東西在我電腦是用不了的,,,一直報錯找不到類-Djava.security.policy,網上也查了挺多,無解。建議就是不要用他23333

相關文章