欢迎来到天天文库
浏览记录
ID:47430390
大小:817.54 KB
页数:18页
时间:2020-01-11
《java大作业设计报告-JAVA聊天室》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、JAVA程序设计多人聊天室13130140372181设计目的Java编程语言是个简单、面向对象、分布式、解释性、健壮、安全与系统无关、可移植、高性能、多线程和静态的语言。本次课程设计旨在应用JAVA编程语言中的网络通信,多线程,数据库编程,图形界面编程等技术实现一个基本的多人在线网络聊天室。并以此巩固JAVA基础知识,体会面向对象的设计方法。2平台要求2.1使用:搭载JAVA运行环境的平台即可。2.2开发环境:Windows1064bitJDK1.8Eclipse4.4WindowBuilder3需
2、求分析管理员:启动服务器,关闭服务器,强制用户退出,聊天房间增添改查。用户:GUI,注册,登陆,聊天等。用例图:181概要设计1.1服务器设计将客户端的请求抽象化,每种请求服务器都会产生一个特定的类的对象去处理它。服务器负责接受客户端请求,根据请求内容完成指定工作。为提高效率,采用多线程结合线程池设计技术,对于每个请求在线程池内得到一个线程去处理请求。如图3-1所示。1.2客户端设计5图41服务器概要图聊天室中一个事物的过程基本流程是:用户产生动作,客户端发送消息,服务器接收并处理,服务器返回处理结
3、果,GUI根据结果进行显示的更新。客户端只在GUI中采用多线程设计。而对服务器回应的接受都是单线程的因为只有一个服务器为自己服务,且在接收数据过程中连接是不可断开的。客户端的设计如图3-2所示。一次事物流程中的步骤编号在图中给出。437612图42客户端概要图181详细设计1.1服务器详细设计服务器要完成的任务是接受客户请求并在自己维护的数据结构上进行相应处理最终将处理结果返回给客户端。具体涉及到多线程,数据库,网络通信几项技术,同时为了实时根据请求产生特定类的对象使用了反例技术。1.1.1总体概览
4、服务器端的入口类为ServerMain。聊天室服务器端代码可分为以下八个部分。除最后两个部分外其他部分为串行执行。在接听后,创建的线程会并发处理客户请求。由于各个处理并发的特点,使得服务器的响应不会应为某个而用户阻塞,提高了效率。图51聊天室服务器代码布局服务器将用户操作抽象为不同的工作类,在接收到请求后根据消息协议在当前实现的工作类名列表中找到类名(通过下标在CommandList类中的ListcommandsList属性中得到),通过反例技术直接生成类的对象。各个类对象负责具体工
5、作,他们都继承ServerWorkClass。而ServerWorkClass继承自WorlClass因为客户端对服务器的回复也应当有特定的类去处理它。目前实现的类有以下五种。当要添加新功能时只需向commandsList属性静态添加索引。进一步,也可在以后加入新的机制实现动态添加功能。18表52工作类名及其工作内容类名服务器端动作HouseRelative处理用户的进入、离开房间请求Login处理用户的上线、下线请求Messages处理用户的消息发送请求UserDelAdd处理用户注册请求User
6、Info处理用户的用户信息查询设置请求服务器中涉及到的类图如下所示:1.1.1协议约定及实现由于要考虑客户端的各个请求需要完成不同的操作,需要根据数据来内容来做特定的工作,本聊天室将通信协议定义如下:userID:服务器通过此ID确定消息是由哪个用户发出的。authorizationcode:服务器对用户身份进行认证的域,每次在接受用户请求后都会更新一个随机数,并且将内容返回,而用户在请求服务器时必须使用最新的验证码否则不会得到服务器响应。这防止了非法用户的不正当操作。18command:表示用户的请
7、求类型其值为具体操作的工作类在commandsList中的下标,服务器通过此下标找到类名产生类的对象。到这里为止的工作都是由一个CommandHandler的类的对象来完成,它实现了Runnable接口,在Accepter类的对象接受到消息后产生一个线程来执行对消息的下一步处理,其主要工作就是通过WorkingClassFactory使用反例技术产生具体工作类,之后调用工作类的doJob()方法完成任务。command2:一个具体工作类是对一类操作的抽象,如与房间相关的操作可能包括进房间和出房间,而具
8、体内容就是根据command2来标示的。从这里开始的工作已经进入到了WorkingClass的代码区域。result:是服务器向客户端告知请求是否正常完成的字段。之后就是具体消息的定义区域。首先一个MessageAmount来表示消息个数,而之后每条消息都有一个int域来表示其长度。为了支持中文,采用字符数组而不是字节数组。服务器和客户端都将协议下的具体报文封装在了PacketUnit类中,其主要提供了一个通过输入流来构建自身的构造方法和重写了toStr
此文档下载收益归作者所有