• Java学习笔记----------------RMI操作


    这个例子不是RMI入门级的,但是也不难

    首先是两个实体类,用来保存客户信息及留言信息

    User.java

    /**
     * 保存用户的实体类
     * 
     * @author 白强
     * 
     */
    public class User {
        private String userName;
        private String password;
        public Message msg[] = new Message[100];
        // the total number of users
        public int num = 0;
    
        public User(String name, String psw) {
            userName = name;
            password = psw;
            num = 0;
        }
    
        public void setUserName(String name) {
    
            userName = name;
        }
    
        public String getUserName() {
    
            return userName;
        }
    
        public void setPassword(String psw) {
    
            password = psw;
        }
    
        public String getPassword() {
    
            return password;
        }
    }

    Message.java

    import java.util.Date;
    
    /**
     * 保存消息的实体
     * 
     * @author 白强
     * 
     */
    public class Message {
    
        private String sender;
        private String receiver;
        private String msgText;
        private Date date;
    
        public Message(String sender, String receiver, String msgText, Date date) {
            super();
            this.sender = sender;
            this.receiver = receiver;
            this.msgText = msgText;
            this.date = date;
        }
    
        public String getSender() {
            return sender;
        }
    
        public void setSender(String sender) {
            this.sender = sender;
        }
    
        public String getReceiver() {
            return receiver;
        }
    
        public void setReceiver(String receiver) {
            this.receiver = receiver;
        }
    
        public String getMsgText() {
            return msgText;
        }
    
        public void setMsgText(String msgText) {
            this.msgText = msgText;
        }
    
        public Date getDate() {
            return date;
        }
    
        public void setDate(Date date) {
            this.date = date;
        }
    
    }

    RMI的接口

    import java.rmi.Remote;
    import java.rmi.RemoteException;
    
    /**
     * RMI接口
     * 
     * @author 白强
     * 
     */
    public interface MessageCenter extends Remote {
    
        /**
         * @param userName
         * @param password
         * @return 注册结果
         * @throws RemoteException
         */
        String register(String userName, String password) throws RemoteException;
    
        /**
         * @return 用户列表
         * @throws RemoteException
         */
        String showUsers() throws RemoteException;
    
        /**
         * @param uName
         * @param psw
         * @return 留言列表
         * @throws RemoteException
         */
        String checkMessage(String uName, String psw) throws RemoteException;
    
        /**
         * @param sender
         * @param receiver
         * @param message
         * @return 留言信息
         * @throws RemoteException
         */
        String leaveMessage(String sender, String receiver, String message)
                throws RemoteException;
    }

    接口的实现

    import java.rmi.RemoteException;
    import java.rmi.server.UnicastRemoteObject;
    import java.util.ArrayList;
    import java.util.Date;
    
    /**
     * RMI实现类
     * 
     * @author 白强
     * 
     */
    public class MessageCenterImpl extends UnicastRemoteObject implements
            MessageCenter {
    
        private static final long serialVersionUID = 1L;
        ArrayList<User> list = new ArrayList<User>();
        String show = "";
    
        public MessageCenterImpl() throws RemoteException {
        }
    
        /*
         * (non-Javadoc)
         * 
         * @see MessageCenter#register(java.lang.String, java.lang.String)
         */
        @Override
        public String register(String userName, String password)
                throws RemoteException {
            for (int i = 0; i < list.size(); i++) {
                if (list.get(i).getUserName().equals(userName)) {
                    show = "The user existes!!!!!!";
                    return show;
                }
            }
            User newUser = new User(userName, password);
            list.add(newUser);
            show = "Register Successful";
            // System.out.println(userName + " has  registered");
            return show;
        }
    
        /*
         * (non-Javadoc)
         * 
         * @see MessageCenter#showUsers()
         */
        @Override
        public String showUsers() throws RemoteException {
            if (list.size() == 0) {
                show = " There are no users utill now.";
            } else {
                show = "users :" + "
    ";
                for (int i = 0; i < list.size(); i++) {
                    show += (i + 1) + " : " + list.get(i).getUserName() + "
    ";
                }
            }
            return show;
        }
    
        /*
         * (non-Javadoc)
         * 
         * @see MessageCenter#checkMessage(java.lang.String, java.lang.String)
         */
        @Override
        public String checkMessage(String uName, String psw) throws RemoteException {
            if (list.size() != 0) {
    
                for (int i = 0; i < list.size(); i++) {
                    // only the registered users can check their messages.
                    if (list.get(i).getUserName().equals(uName)
                            && list.get(i).getPassword().equals(psw)) {
                        int j = list.get(i).num;
                        if (j == 0) {
                            show = "No message for you";
                        } else {// show all the message for the user.
                            show = "There are Messages :" + "
    ";
                            for (int k = 0; k < j; k++) {
                                show += " From : " + list.get(i).msg[k].getSender()
                                        + " Message :"
                                        + list.get(i).msg[k].getMsgText()
                                        + " Time: " + list.get(i).msg[k].getDate()
                                        + "
    ";
                            }
                        }
                    }
                }
                if (show.equals("")) {
                    show = "Wrong userName or password";
                }
            } else {
                // No users
                show = "There are no users.";
            }
            return show;
        }
    
        /*
         * (non-Javadoc)
         * 
         * @see MessageCenter#leaveMessage(java.lang.String, java.lang.String,
         * java.lang.String)
         */
        @Override
        public String leaveMessage(String sender, String receiver, String message)
                throws RemoteException {
            show = "";
    
            for (int i = 0; i < list.size(); i++) {
    
                if (list.get(i).getUserName().equals(sender)) {
    
                    for (int j = 0; j < list.size(); j++) {
    
                        if (list.get(j).getUserName().equals(receiver)) {
                            Date d = new Date();
                            // the date and time the message was left.
                            Message ml = new Message(sender, receiver, message, d);
                            // create a new message.
                            list.get(j).msg[list.get(j).num] = ml;
                            list.get(j).num++;
                            // add one to the user's total message number.
                            show = "Leave Message Successfully!!";
                        }
                    }
                    if (show == "") {
                        // if the receiver do not exist.
                        show = "the receiver do not exist.";
                    }
                }
            }
            if (show == "") {
                // if the sender have not registered.
                show = "Please register first!";
            }
    
            return show;
        }
    }

    RMIServer 用来发布远程服务

    import java.rmi.Naming;
    import java.rmi.registry.LocateRegistry;
    
    /**
     * RMIServer
     * 
     * @author 白强
     * 
     */
    public class MessageServer {
    
        public static void main(String[] args) {
            try {
                MessageCenter messageService = new MessageCenterImpl();
                String host = "localhost";
                int port = 8888;
                if (args.length > 1) {
                    host = args[0];
                    port = Integer.parseInt(args[1]);
                }
                // 注册,切记不能少
                LocateRegistry.createRegistry(port);
                String registration = "rmi://" + host + ":" + port
                        + "/MessageCenter";
                Naming.bind(registration, messageService);
                System.out.println("Start RMI service Successfully!!! ");
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    
    }

    客户端,用来远程连接操作

    import java.io.BufferedReader;
    import java.io.InputStreamReader;
    import java.rmi.Naming;
    import java.rmi.Remote;
    
    /**
     * RMI的客户端类
     * 
     * @author 白强
     * 
     */
    public class MessageClient {
    
        public MessageClient(String registration) throws Exception {
            Remote remoteService = Naming.lookup(registration);
            MessageCenter messageService = (MessageCenter) remoteService;
            while (true) {
                displayMenu();
                BufferedReader br = new BufferedReader(new InputStreamReader(
                        System.in));
                try {
                    int actionID = Integer.parseInt(br.readLine());
                    switch (actionID) {
                    case 1:
                        // Register
                        System.out.println("Enter your name: ");
                        BufferedReader bfReader1 = new BufferedReader(
                                new InputStreamReader(System.in));
                        String userName = bfReader1.readLine();
                        System.out.println("Enter your password: ");
                        BufferedReader bfReader2 = new BufferedReader(
                                new InputStreamReader(System.in));
                        String psw = bfReader2.readLine();
                        System.out.println(messageService.register(userName, psw));
                        break;
                    case 2:
                        // showUser
                        System.out.println(messageService.showUsers());
                        break;
                    case 3:
                        // checkMessage
                        System.out.println("Enter your name: ");
                        BufferedReader bfReader3 = new BufferedReader(
                                new InputStreamReader(System.in));
                        String checkUserName = bfReader3.readLine();
                        // get the user's password.
                        System.out.println("Enter your password: ");
                        BufferedReader bfReader4 = new BufferedReader(
                                new InputStreamReader(System.in));
                        String checkpsw = bfReader4.readLine();
                        System.out.println(messageService.checkMessage(
                                checkUserName, checkpsw));
                        break;
                    case 4:
                        // leaveMessage
                        System.out.println("Enter your name: ");
                        BufferedReader bfReader5 = new BufferedReader(
                                new InputStreamReader(System.in));
                        String leaveUserName = bfReader5.readLine();
                        // get the receiver's name.
                        System.out
                                .println("Enter the name which the message send to: ");
                        BufferedReader bfReader6 = new BufferedReader(
                                new InputStreamReader(System.in));
                        String receiver = bfReader6.readLine();
                        // get the message context.
                        System.out.println("Enter the message: ");
                        BufferedReader bfReader7 = new BufferedReader(
                                new InputStreamReader(System.in));
                        String msg = bfReader7.readLine();
                        System.out.println(messageService.leaveMessage(
                                leaveUserName, receiver, msg));
                        break;
                    case 5:
                        System.exit(0);
                        break;
                    default:
                        System.out.println("Invalid input!");
                    }
                } catch (NumberFormatException nfe) {
                    System.out.println("Invalid input!");
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
    
        /**
         * 用来显示选项
         */
        public void displayMenu() {
            System.out.println("");
            System.out.println("Input a number :");
            System.out.println("");
            System.out.println("----Designed by BaiQiang------Start--------");
            System.out.println("      1 : Register");
            System.out.println("      2 : ShowsUsers");
            System.out.println("      3 : CheckMessage");
            System.out.println("      4 : LeaveMessage");
            System.out.println("    5 : Exit");
            System.out.println("----Designed by BaiQiang-------End--------");
        }
    
        public static void main(String[] args) throws Exception {
            String registry = "localhost";
            int port = 8888;
            if (args.length > 1) {
                registry = args[0];
                port = Integer.parseInt(args[1]);
            }
            String registration = "rmi://" + registry + ":" + port
                    + "/MessageCenter";
            new MessageClient(registration);
        }
    }

    All Right!!!!!!!!!

  • 相关阅读:
    Android(安卓)全套开发资料视频+源码
    腾讯qlv视频转为MP4格式工具
    优酷爱奇艺视频转换为MP4格式工具
    JAVA全套资料含视频源码(持续更新~)
    PPT、Word、Excel模板免费下载
    图片下载
    aspx使用KindEditor副文本框插件出现检测到有潜在危险
    跨域请求
    WEUI滚动加载
    jq复制
  • 原文地址:https://www.cnblogs.com/bq12345/p/3495994.html
Copyright © 2020-2023  润新知