ImageVerifierCode 换一换
格式:DOCX , 页数:22 ,大小:502.33KB ,
资源ID:2877444      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/2877444.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(java大作业设计报告JAVA聊天室.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

java大作业设计报告JAVA聊天室.docx

1、java大作业设计报告JAVA聊天室java大作业设计报告JAVA聊天室JAVA程序设计多人聊天室 1 设计目的Java 编程语言是个简单、面向对象、分布式、解释性、健壮、安全与系统无关、可移植、高性能、多线程和静态的语言。本次课程设计旨在应用JAVA编程语言中的网络通信,多线程,数据库编程,图形界面编程等技术实现一个基本的多人在线网络聊天室。并以此巩固JAVA基础知识,体会面向对象的设计方法。2 平台要求使用:搭载JAVA运行环境的平台即可。开发环境:Windows10 64bit JDK 1.8Eclipse 4.4Window Builder3 需求分析管理员:启动服务器,关闭服务器,强

2、制用户退出,聊天房间增添改查。用户:GUI,注册,登陆,聊天等。用例图:4 概要设计服务器设计将客户端的请求抽象化,每种请求服务器都会产生一个特定的类的对象去处理它。服务器负责接受客户端请求,根据请求内容完成指定工作。为提高效率,采用多线程结合线程池设计技术,对于每个请求在线程池内得到一个线程去处理请求。如图3-1所示。客户端设计5聊天室中一个事物的过程基本流程是:用户产生动作,客户端发送消息,服务器接收并处理,服务器返回处理结果,GUI根据结果进行显示的更新。客户端只在GUI中采用多线程设计。而对服务器回应的接受都是单线程的因为只有一个服务器为自己服务,且在接收数据过程中连接是不可断开的。客

3、户端的设计如图3-2所示。一次事物流程中的步骤编号在图中给出。437612图 42客户端概要图5 详细设计服务器详细设计服务器要完成的任务是接受客户请求并在自己维护的数据结构上进行相应处理最终将处理结果返回给客户端。具体涉及到多线程,数据库,网络通信几项技术,同时为了实时根据请求产生特定类的对象使用了反例技术。5.1.1 总体概览服务器端的入口类为ServerMain。聊天室服务器端代码可分为以下八个部分。除最后两个部分外其它部分为串行执行。在接听后,创立的线程会并发处理客户请求。由于各个处理并发的特点,使得服务器的响应不会应为某个而用户阻塞,提高了效率。图 51聊天室服务器代码布局服务器将用

4、户操作抽象为不同的工作类,在接收到请求后根据消息协议在当前实现的工作类名列表中找到类名(经过下标在CommandList类中的List commandsList属性中得到),经过反例技术直接生成类的对象。各个类对象负责具体工作,她们都继承ServerWorkClass。而ServerWorkClass继承自WorlClass因为客户端对服务器的回复也应当有特定的类去处理它。当前实现的类有以下五种。当要添加新功能时只需向commandsList属性静态添加索引。进一步,也可在以后加入新的机制实现动态添加功能。表 52工作类名及其工作内容类名服务器端动作HouseRelative处理用户的进入、离

5、开房间请求Login处理用户的上线、下线请求Messages处理用户的消息发送请求UserDelAdd处理用户注册请求UserInfo处理用户的用户信息查询设置请求服务器中涉及到的类图如下所示:5.1.2 协议约定及实现由于要考虑客户端的各个请求需要完成不同的操作,需要根据数据来内容来做特定的工作,本聊天室将通信协议定义如下:userID:服务器经过此ID确定消息是由哪个用户发出的。authorization code:服务器对用户身份进行认证的域,每次在接受用户请求后都会更新一个随机数,而且将内容返回,而用户在请求服务器时必须使用最新的验证码否则不会得到服务器响应。这防止了非法用户的不正当操

6、作。command:表示用户的请求类型其值为具体操作的工作类在commandsList中的下标,服务器经过此下标找到类名产生类的对象。到这里为止的工作都是由一个CommandHandler的类的对象来完成,它实现了Runnable接口,在Accepter类的对象接受到消息后产生一个线程来执行对消息的下一步处理,其主要工作就是经过WorkingClassFactory使用反例技术产生具体工作类,之后调用工作类的doJob()方法完成任务。command2:一个具体工作类是对一类操作的抽象,如与房间相关的操作可能包括进房间和出房间,而具体内容就是根据command2来标示的。从这里开始的工作已经进

7、入到了WorkingClass的代码区域。result:是服务器向客户端告知请求是否正常完成的字段。之后就是具体消息的定义区域。首先一个MessageAmount来表示消息个数,而之后每条消息都有一个int域来表示其长度。为了支持中文,采用字符数组而不是字节数组。服务器和客户端都将协议下的具体报文封装在了PacketUnit类中,其主要提供了一个经过输入流来构建自身的构造方法和重写了toString方法以便发送时序列化。PacketUnit的产生源头是GUI的监听处理函数。由特定部位按钮或组件调用PackUnitGenerator类的特定静态方法产生特定的对象。5.1.3 初始化数据库数据库采

8、用JAVA数据库JDBC技术。一般步骤为加载特定数据库驱动,产生建立连接的URL,根据URL连接数据库,在连接上创立statement类的对象进行查询和更新任务的发送。与数据库有关的所有工作都由DataBaseServer类来完成。由于考虑到聊天室中大部分操作不需要数据库,而且全程一个连接可能在并发过程中会导致潜在的错误,在初始化中只进行了驱动的加载。之后需要查询或更新数据库时经过创立DataBaseServer类的对象来创立新的连接,以对象为单位向数据库发送查询请求。DataBaseServer主要提供以下几个方法:public static void init();完成数据库驱动的加载,而

9、且由于静态方法第一次调用,获取服务器连接的DataBaseServer静态属性URL也会在此时生成。public DataBaseServer();DataBaseServer的构造函数,每次调用都会创立一条向MYSQL数据库的连接。public int updateQuery(String job);向已连接的数据库发送一个更新请求,参数为SQL更新语句。public ResultSet getResult(String job);向已连接的数据库发送一个查询请求,参数为SQL查询语句。而且返回一个ResultSet结果,是一个包含了查询结果的对象。具体代码位于DataBaseServer.

10、java文件内。数据库采用MySQL数据库,使用到了两张表,定义如下:userinfo表: 表项类型uidintnamevarcharpasswordvarchargendercharteleareachartelephonecharnicknamevarcharbirthyearintbirthmonthintbirthdayinthomelandvarcharinfovarcharhouseinfo表:表项类型hidintshidinthousenamevarcharouidintcreateyearintcreatemonthintcreatedayinthouseinfovarbina

11、ry5.1.4 初始化用户信息用户信息不但是服务器对客户端的抽象,也是服务器内部对用户进行管理最基本的类。在服务器中以User类来表示用户。其有用户的基本个人信息,以及用户所在客户端的IP和端口(在Login过程后初始化),和用户当前所在房间的列表(以便用户名等信息更新时及时通知所有看得到此用户的用户)。属性:类型属性:类型homeLand : Stringuid : int info : StringuserName : String authCode : intpassword : String ipAddress : InetAddressgender : char port : int

12、telearea : StringipAddressEvil : InetAddresstelephone : StringportEvil : intnickname : String currentHouse : ListbirthYear: int ownHouse : ListbirthMonth : intbirthDay :int总体上,服务器在初始化时从数据库中直接读取所有用户,而且将她们存储于线下用户的userAll表中(这里有一个基本约定:服务器启动时是没有用户在线的),而在线用户则存储在另一个userCul表中,这两个表在服务器中表示了当前的所有用户的集合。而这两个表的维护

13、归一个叫做UserFactory的类来管理,它负责向外界提供User对象采用了工厂设计模式,而且采用了单例模式,因为一个服务器只需一个工厂进行管理。用户初始化的流程如下:UserFactory对外提供如下几个方法:public User getByUid(int uid);经过用户编号获得User类的对象。public User getByName(String name);经过用户名获得User类的对象。public User createUser(String messages);创立一个用户而且将其写入数据库,同时存入userAll。public User updateUser(Stri

14、ng messages,User userTmp);更新一个用户的信息,将其写入到数据库中。用户名改变造成的客户端与服务器不一致由UserInfo类处理,一般情况下此方法也只由UserInfo类的对象调用。public void loginAUser(User utm);使一个用户由线下状态转换为线上状态。即从userAll表转移到userCul表。public void logoffAUser(User utm);与loginAUser相反。public boolean isOnline(int uid);检查一个用户是否在线。public boolean isExists(int uid)

15、;经过UID检查指定用户是否存在。public boolean isExists(String checkName);经过用户名检查指定用户是否存在。public List getUserCur();获取所有在线用户。具体代码位于UserFactory.java内。5.1.5 初始化房间信息房间是用户间通信的场所,通信不可能从一个房间到另一个房间。在服务器中房间用House类表示。为此,房间主要维护一个房间内用户的表,以便某个用户发送消息时使服务器知道该把消息发送给谁。房间信息的初始化类比用户信息的初始化,也使用了工厂模式和单例技术,只是少了在线不在线这个概念。House的工厂类为HouseFactory。其向外提供了经过HID或房间名来获取房间对象的方法。

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1