Eclipse简介
Eclipse 是一个开放源代码的、基于 Java 的可扩展开发平台。就其本
身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。幸运的是,Eclipse 附带了一个标准的插件集,包括 Java 开发工具。
Eclipse是著名的跨平台的自由集成开发环境(IDE)。最初主要用来Java语 言开发,但是目前亦有人通过插件使其作为其他计算机语言比如C++和Python的开发工具。Eclipse的本身只是一个框架平台,但是众多插件的支持 使得Eclipse拥有其他功能相对固定的IDE软件很难具有的灵活性。许多软件开发商以Eclipse为框架开发自己的IDE。
Eclipse 最初由OTI和IBM两家公司的IDE产品开发组创建,起始于1999年4月。IBM提供了最初的Eclipse代码基础,包括Platform、JDT 和PDE。目前由IBM牵头,围绕着Eclipse项目已经发展成为了一个庞大的Eclipse联盟,有150多家软件公司参与到Eclipse项目中, 其中包括Borland、Rational Software、Red Hat及Sybase等。Eclipse是一个开发源码项目,它其实是 Visual Age for Java的替代品,其界面跟先前的Visual Age for Java差不多,但由于其开放源码,任何人都可以免费得到,并可以在此基础上开发各自的插件,因此越来越受人们关注。近期还有包括Oracle在内的许多 大公司也纷纷加入了该项目,并宣称Eclipse将来能成为可进行任何语言开发的IDE集大成者,使用者只需下载各种语言的插件即可。
3.需求分析
3.1程序简介
随着网络技术的发展,人们越来越多的依赖于网络,为了方便人们的生活,网络聊天自然成为了热点,各种工具到处都是。此程序便是模仿其他聊天工具设计的,当然只是实现了比较少的功能,可以进行基本的聊天。
3.2 程序功能
该程序功能:该程序分为2个部分,一个是客户端程序,一个是服务端程序,
1
需要先开启服务器,再开启客户端才能使用,客户端程序提供了相互通信、清空聊天记录的等功能,服务端则用于接受客户端的请求,记录客户端的信息等。
4.系统设计 4.1概要设计
此聊天程序共有2个部分,客户端和服务器。客户端中包含了1个Java文件,为主类client.java,;服务器端只有一个主类Server.java。
程序流程图:
服务器程序结构 客户端程序结构
4.2详细设计
(1)服务器程序实现
本程序采用的是Socket通信来设计的,建立一个主类Server.java,其中主类中还包括服务器线程 然后在其构造方法加载程序所需的组件,构造方法如下:
2
public ClientThread(Socket socket) { try {
this.socket = socket;
reader = new BufferedReader(new InputStreamReader(socket .getInputStream()));
writer = new PrintWriter(socket.getOutputStream()); // 接收客户端的基本用户信息 String inf = reader.readLine();
StringTokenizer st = new StringTokenizer(inf, \ user = new User(st.nextToken(), st.nextToken()); // 反馈连接成功信息
writer.println(user.getName() + user.getIp() + \与服务器连接成功!\ writer.flush();
// 反馈当前在线用户信息 if (clients.size() > 0) { String temp = \
for (int i = clients.size() - 1; i >= 0; i--) {
temp += (clients.get(i).getUser().getName() + \ .get(i).getUser().getIp()) + \ }
writer.println(\ writer.flush(); }
// 向所有在线用户发送该用户上线命令 for (int i = clients.size() - 1; i >= 0; i--) { clients.get(i).getWriter().println(
\ clients.get(i).getWriter().flush(); }
} catch (IOException e) {
3
e.printStackTrace(); } }
@SuppressWarnings(\
public void run() {// 不断接收客户端的消息,进行处理。 String message = null; while (true) { try {
message = reader.readLine();// 接收客户端消息 if (message.equals(\下线命令 {
contentArea.append(this.getUser().getName() + this.getUser().getIp() + \下线!\\r\\n\ // 断开连接释放资源 reader.close(); writer.close(); socket.close();
// 向所有在线用户发送该用户的下线命令 for (int i = clients.size() - 1; i >= 0; i--) { clients.get(i).getWriter().println( \ clients.get(i).getWriter().flush(); }
listModel.removeElement(user.getName());// 更新在线列表
// 删除此条客户端服务线程
for (int i = clients.size() - 1; i >= 0; i--) { if (clients.get(i).getUser() == user) {
4