原文链接:https://blog.youkuaiyun.com/Sardar_/article/details/78887586
在原文的代码基础上
-
优化了异常检测。
-
增加了线程安全,用vector替代了arraylist
-
优化了代码结构
也就是加强版,无BUG版本
题目简介:
主要功能
1) 使用Java RMI创建一个分布式议程共享服务。不同的用户可以使用这个共享议程服务执行查询、添加和删除会议的操作。服务器支持会议的登记和清除等功能;
2) 议程共享服务包括以下功能:用户注册、添加会议、查询会议、删除会议、清除会议;
3) 用户注册
新用户注册需要填写用户名和密码,如果用户名已经存在,则注册失败并打印提示信息,否则注册成功并打印成功提示。使用如下命令进行用户注册:
4) 添加会议
已注册的用户可以添加会议。会议必须涉及到两个已注册的用户,一个只涉及单个用户的会议无法被创建。会议的信息包括开始时间、结束时间、会议标题、会议参与者。当一个会议被添加之后,它必须出现在创建会议的用户和参加会议的用户的议程中。如果一个用户的新会议与已经存在的会议出现时间重叠,则无法创建会议。最终,用户收到会议添加结果的提示。使用如下命令进行会议的添加:
5) 查询会议
已注册的用户通过给出特定时间区间(给出开始时间和结束时间)在议程中查询到所有符合条件的会议记录。返回的结果列表按时间排序。在列表中,包括开始时间、结束时间、会议标题、会议参与者等信息。使用如下命令进行会议的查询:
6) 删除会议
已注册的用户可以根据会议的信息删除由该用户创建的会议。使用如下命令进行删除会议操作:
7) 清除会议
已注册的用户可以清除所有由该用户创建的会议。使用如下命令进行清除操作:
使用方法:
1.启动RMISever
2.启动RMIClient,输入命令
项目结构:
package ssd8.rmi.bean;
import java.util.Date;
public class Meeting {
private User sponsor;
private User otheruser;
private Date start;
private Date end;
private String title;
private int id;
public Meeting(User sponsor, User otheruser, Date start, Date end, String title) {
super();
this.sponsor = sponsor;
this.otheruser = otheruser;
this.start = start;
this.end = end;
this.title = title;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public User getSponsor() {
return sponsor;
}
public void setSponsor(User sponsor) {
this.sponsor = sponsor;
}
public User getOtheruser() {
return otheruser;
}
public void setOtheruser(User otheruser) {
this.otheruser = otheruser;
}
public Date getStart() {
return start;
}
public void setStart(Date start) {
this.start = start;
}
public Date getEnd() {
return end;
}
public void setEnd(Date end) {
this.end = end;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
}
package ssd8.rmi.bean;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Vector;
public class User implements Serializable {
private String name;
private String password;
private Vector<Meeting> schedule;
public User(String name, String password) {
super();
this.name = name;
this.password = password;
this.schedule = new Vector<Meeting>();
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public Vector<Meeting> getSchedule() {
return schedule;
}
}
package ssd8.rmi.interface_rmi;
import java.rmi.Remote;
import java.text.ParseException;
/**
* 远程接口必须扩展接口java.rmi.Remote
* @author Sarda
*/
public interface RMIInterface extends Remote {
/**
* 注册用户
* 如果用户名存在,返回false,否则注册新用户,返回true
*/
public boolean register(String name, String password)throws java.rmi.RemoteException;
/**
* 添加新会议
* 账号密码不正确,返回0
* 会议发起者和参与者是同一个用户,返回-1
* 会议参与者没有注册,返回-2
* 会议时间与发起者时间冲突,返回-3
* 会议时间与参与者时间冲突,返回-4
* 添加成功,返回1
* @throws P