Java RMI Demo

前言

在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

猜你喜欢

转载自blog.csdn.net/bkjs626/article/details/78755727