UML课程设计题目网络聊天程序开发设计与实现学号:*************名:***指导教师:完成时间:2017年 12月目录1.摘要 (2)2.绪论 02.开发环境 03.需求分析 (1)3.1程序简介 (1)3.2程序功能 (1)4.系统设计 (2)4.1概要设计 (2)4.2详细设计 (2)5.测试 (7)6.结论 (9)参考文献 (10)摘要本次训练主要是考查了对JA V A程序设计的综合运用,设计一个Socket 通信的聊天程序,用户可以通过程序进行聊天通信,但不支持用户自定义表情及图片的发送。
本程序设计也用到了一些相关的标准Java的类,给程序设计带来了许多的方便,但用那些要切记加相应的类的包,还有一些构造方法和个别接口方法。
本程序可以实现用户之间的一些简单的交互,虽然功能较少,但是我想通过这次程序设计来熟悉并且学习更多关于JA V A编程的东西,来便于以后可以使用。
关键词:java聊天1.绪论对于一个选择网络编程的人来说,必须要有足够的细心和耐心,因为编程一般来说是很枯燥的乏味的,而且程序会越来越复杂,它所用到的符号、标记很多,所以不能出点小错误的。
还有,我们不能只是看程序,要学会把自己学的自己拿去实践,自己去编一些程序,培养自己的动手能力,掌握一些编程技巧,熟练运用自己学到的理论知识,这样在以后才能开发出属于自己的东西。
如今,随着科学技术的发展,计算机已成为了我们生活中必不可少的设备了,而掌握计算机知识和运用,又成了我们每一个人的目标了。
现在IT行业的飞速发展,无不应正了以前、现在、将来计算机行业都是科学发展的主导行业。
而这些基本上都建立在程序上的,所以程序员对计算机行业来说,可想而知有多么的重要了,他们所付出的每一滴汗水都将推动这个行业的发展。
现在我就用JA V A语言编写一个简单的程序——Java聊天程序。
将所学的基本知识用到其中去,这里包括了构造方法,创建图形界面,引用类等等。
这不仅能锻炼我的实践能力,同时也进一步复习和巩固了我所学的理论知识。
对以前没有学好的还有督促和促进作用。
而且,根据需要,还可以了解一些课外的知识。
增加自己的知识面。
2.开发环境在开发此聊天程序时,该项目所使用的软件开发环境如下:操作系统:Windows 7开发工具:eclipse3.2及其VE插件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个部分,一个是客户端程序,一个是服务端程序,需要先开启服务器,再开启客户端才能使用,客户端程序提供了相互通信、清空聊天记录的等功能,服务端则用于接受客户端的请求,记录客户端的信息等。
4.系统设计4.1概要设计此聊天程序共有2个部分,客户端和服务器。
客户端中包含了1个Java文件,为主类client.java,;服务器端只有一个主类Server.java。
程序流程图:服务器程序结构客户端程序结构4.2详细设计(1)服务器程序实现本程序采用的是Socket通信来设计的,建立一个主类Server.java,其中主类中还包括服务器线程然后在其构造方法加载程序所需的组件,构造方法如下: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() + "/" + clients.get(i).getUser().getIp())+ "@";}writer.println("USERLIST@" + clients.size() + "@" + temp);writer.flush();}// 向所有在线用户发送该用户上线命令for (int i = clients.size() - 1; i >= 0; i--) {clients.get(i).getWriter().println("ADD@" + user.getName() + user.getIp());clients.get(i).getWriter().flush();}} catch (IOException e) {e.printStackTrace();}}@SuppressWarnings("deprecation")public void run() {// 不断接收客户端的消息,进行处理。
String message = null;while (true) {try {message = reader.readLine();// 接收客户端消息if (message.equals("CLOSE"))// 下线命令{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("DELETE@" + user.getName());clients.get(i).getWriter().flush();}listModel.removeElement(user.getName());// 更新在线列表// 删除此条客户端服务线程for (int i = clients.size() - 1; i >= 0; i--) {if (clients.get(i).getUser() == user) {ClientThread temp = clients.get(i);clients.remove(i);// 删除此用户的服务线程temp.stop();// 停止这条服务线程return;}}} else {dispatcherMessage(message);// 转发消息}} catch (IOException e) {e.printStackTrace();}}}其运行截图如下图所示:(2)、客户端主程序本程序使用了默认的卡片布局方式,对窗口的大小进行设置,让聊天窗口能够居中显示,以及登录主窗口类。
实现窗口布局功能和类的调用功能的主要代码如下:* 连接服务器** @param port* @param hostIp* @param name*/public boolean connectServer(int port, String hostIp, String name) {// 连接服务器try {socket = new Socket(hostIp, port);// 根据端口号和服务器ip建立连接writer = new PrintWriter(socket.getOutputStream());reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));// 发送客户端用户基本信息(用户名和ip地址)sendMessage(name + "@" + socket.getLocalAddress().toString());// 开启接收消息的线程messageThread = new MessageThread(reader, textArea);messageThread.start();isConnected = true;// 已经连接上了return true;} catch (Exception e) {textArea.append("与端口号为:" + port + " IP地址为:" + hostIp+ " 的服务器连接失败!" + "\r\n");isConnected = false;// 未连接上return false;}}(5)、聊天窗口程序设计程序提供了发送文字和关闭聊天的的简单功能。