《2022年JAVA课程设计方案聊天室系统.docx》由会员分享,可在线阅读,更多相关《2022年JAVA课程设计方案聊天室系统.docx(28页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精品学习资源Java 课程设计指导书(同学版初稿)其次章 谈天室系统目标2.1背景介绍2.1.1业务背景2.1.2技术背景2.2需求分析2.2.1功能需求分析2.2.2业务对象分析2.2.3验收测试要求2.3系统设计2.3.1总体设计2.3.2详细设计2.4系统实现2.5小结2.6展望其次章谈天室系统学习目标:1、懂得基于网络的C/S 模式的软件系统结构,把握网络编程的基本概念;2 、 了 解 Java的 多 线 程 机 制 , 掌 握 Java多 线 程 技 术 的 应 用 ;3、娴熟把握基于 TCP协议的 Socket 编程; 4、明白 Socket 编程的协议商定, 把握简洁应用协议的开
2、发;5、进一步巩固进展团队协作才能;学习寄语 :想必大家都用过 QQ,其主要功能就是谈天,是不是很想知道它是如何实现的?本工程就是帮你实现一个简洁的谈天系统,当然跟商业工程没法比,但从中你却可以明白这些系统是如何实现的,学到开发类似系统的基础知识和基本技能(基本并不意味不有用);本章的内容有确定难度(多线程、基于 TCP 的应用协议编程),所以系统的开发接受了“增量迭代”的开发方式, 由简易到繁难,期望你能顺当前行;我们的信念照旧是:“不抛弃,不放弃”;你的转变和收成照旧是老师真诚的期望,期望你更踏实、更自信;Comeon.2.1 背景介绍2.1.1 业务背景随着网络社会的不断进展,具有相同爱
3、好的网民需要相互远程沟通,既要能省钱又要能即时交互,电话太贵、 email 又嫌慢,所以开发一个类似QQ 的准时通讯系统就变得特殊有意义了;“Happy Chat”谈天系统应运而生,它较之QQ 的唯独好处是自主开发,用的放心,更适合在局域网内使用;它供应的功能远不如 QQ 丰富,但应具有如下功能:( 1)与谈天室成员一起谈天;( 2)可以与谈天室成员私聊;( 3)用户注册、登录;( 4)服务器监控谈天内容;欢迎下载精品学习资源( 5)服务器发送通知;( 6)服务器踢人;( 7)储存服务器日志;( 8)储存用户谈天信息;2.1.2 技术背景本系统要求使用 java技术开发,使用文件储存数据,集成
4、开发环境使用eclipse ;开发者应有 java程序设计语言、 SWING基本 GUI 组件、多线程、文件使用、 socket编程、使用 eclipse的基本学问和技能;系统接受两层C/S 体系结构, C 端负责通过 GUI 与客户交互,实现注册、登陆、收发信息、退出等功能; S 端是谈天系统的应用服务器,主要有处理用户注册、登录、用户收发信息、用户退出等功能; C 端和 S 端是通过网络交互的,其基本原理如图1 所示:图 1 C/S 通讯基本原理图第一服务器启动,它会建立一个特地用于接收客户端连接请求的“倾听 Socket ”(相当于总服务台,有固定的IP地址和端口号) , 然后等待客户的
5、连接请求;当用户想谈天时,从界面输入信息,然后与服务器建立Socket 连接(连接时应指定服务器的IP 地址和端口号,而客户端 socket的端口由本方操作系统从闲暇端口中确定),服务器端的“倾听Socket ”收到连接请求后,一般会接受连接请求,并生成一个服务端socket (其端口号由服务端操作系统从闲暇端口欢迎下载精品学习资源中确定),特地负责与此客户端socket 的通信;一旦连接请求成功,客户端将信息及请求通过本方socket 的输出流发送给服务器端相应的socket,服务端就通过服务器端Socket 的输入流接受客户端传输过来的信息及请求,分析是何请求,然后依据请求类型,进行相应的
6、处理(如登录、转发信息等);服务方也可以依据需要,通过socket 的输出流发信息和请求给客户端(公告);客户方和服务方都可以通过关闭本方的socket而终止一次通讯过程;不难发觉服务器需要能同时接受多个客户的请求,为了实现这一点,一般使用多线程机制来处理,对每一个客户端连接通讯,服务器端都有一个线程特地负责处理(相当于一个服务员特地服务一个以IP 地址和端口号唯独标识的客户);上述方式两个谈天者之间通信必需通过服务器进行转发,谈天者多时,明显服务器是个性能瓶颈;能不能谈天者之间直接通信?当然可以,这是所谓的P2P 谈天室,缺点是对谈天者缺乏集中监管的手段;也有界于二者之间的,即有一服务器,接
7、受注册和登录,实际谈天双方通信时,仍然是直接通信,此时服务器相当于一个婚姻介绍所,只管牵线搭桥,详细谈仍是谈天者自己的事;本文主要接受谈天信息通过服务器转发的方式,而且只支持一个谈天室;因为其他典型系统如电子邮件系统, FTP 系统均接受类似结构, WEB 服务系统本质上也是 C/S 系统,只不过其客户端是浏览器,接受了 HTTP 通信协议和HTML ,所以变成了 B/S 结构,可以认为是 C/S 的一个详细应用,其机理是相似的;2.2 需求分析2.2.1 功能需求分析系统的主要功能已在业务分析中有所介绍,在这里需要对每个功能从使用者角度作较为详细的分析;很明显,整个系统的功能可以自然地分为客
8、户端和服务器端;以下是主要用例描述一 客户端1 .注册(1) 客户启动程序,显示出登陆界面(2) 客户选择其中的注册按钮,系统显示注册界面( 3)客户填写用户名、密码、确认密码、性别、年龄、电子邮件,按确欢迎下载精品学习资源定按钮( 4)系统验证密码和确认密码是否相符、用户名(不能重复)、电子邮件格式、年龄(大于 10 小于 100)( 5)系统发送上述信息及“注册请求”到服务端,等待服务端返回“注册成功”消息(6) 系统提示注册成功(7) 系统返回登陆界面如验证失败,提示“重新输入”如服务端返回“注册失败”,提示“注册失败”如服务端返回“注册失败用户名重名”,就提示“注册失败用户重名”;2.
9、 登录(1) 客户启动程序,显示出登陆界面(2) 客户填写用户名、密码,服务器IP 地址,按登陆按钮(3) 系统验证用户名、密码,不能为空、密码字符长度为6-10( 4)系统发送用户名、密码及“登陆请求”到服务端,等待服务端返回“登录成功”消息(5)如成功系统显示客户端主界面(收发消息界面)如用户名、密码验证失败,系统提示;“用户名或密码错”,重复3 次如仍不能通过验证就客户端程序退出;如服务端返回“登录失败”,系统提示“用户名或密码错”;3. 发送信息( 1)在客户端主界面,用户输入消息,选择是群发仍是私聊,如是私聊仍要选择对方用户名,按发送按钮(2)系统验证消息长度 ,私聊要求目的方用户名
10、非空;( 3)系统发送信息及“接收消息请求”到服务器端,等待服务端返回“接收成功”消息(等待返回消息可省);(4)系统提示信息已发送如发送不成功,就系统提示“发送失败”;4. 接收信息欢迎下载精品学习资源(1) 客户端系统启动,进入主界面后,会显示消息接收框(2) 其他客户或服务端系统本身发送消息过来,系统接收,分析确认是” 接收消息请求“,就分析提取出消息3 在消息接收框逐条显示发送者姓名、发送的消息;5 退出(1) 用户请求退出,按退出按钮(2) 系统确认用户退出(对话框)(3) 系统发“退出请求”到服务端,等待服务端返回“退出成功”(等待返回消息可省)(4) 客户端系统关闭连接,程序退出
11、二 服务器端1. 用户注册(1) 系统启动后,等待客户请求(2) 客户请求到,接受请求,分析确认是“注册请求”( 3)系统读取信息,分析并再次验证用户名、密码、确认密码、性别、年龄、电子邮件;(4) 系统依据用户名,在已有客户记录中查询,确认没有重名(5) 系统将用户名、密码、确认密码、性别、年龄、电子邮件信息储存(6) 系统向客户端发送“注册成功”消息(7) 系统在监控界面上写信息: xx 客户名 已注册 注册时间如重名,向客户端发“注册重名”消息如注册失败,向客户端发“注册失败”消息2. 用户登录(1) 系统启动后,等待客户请求(2) 客户请求到,接受请求,分析确认是“登录请求”(3) 系
12、统读取信息,验证用户名、密码是否存在(4) 系统验证是否已经登录(5) 系统验证用户是否已超过最大用户数(6) 系统将客户加入谈天室,通知其它客户“新用户加入”(7) 系统向客户端发送“登录成功”消息欢迎下载精品学习资源(8) 系统在监控界面上写信息:客户名:已登录登录时间如验证失败,向客户端发“验证失败”消息3. 发送信息(用于治理员向谈天者发送公告信息)(1)系统启动后,等待治理员请求( 2)治理员在监控界面输入消息,确定发送类型(群发仍是私聊),如私聊仍需指定目的用户名,按发送按钮(3)系统读取信息,分析并确认是群发仍是私聊( 4)如是群发,就将信息发给谈天室内其它全部用户;如是私聊,就
13、将消息发给指定的用户;(5)系统在监控界面上写信息:治理员 -消息如显现反常,提示“发送失败”;4 接收信息(1) 系统启动后,等待客户请求(2) 客户请求到,接受请求,分析确认是“接收信息请求”(3) 系统读取信息,分析并确认是群发仍是私聊(4) 如是群发,就将信息发给谈天室内其它全部用户(5) 系统向客户端发送“接收成功”消息 可省(6) 系统在监控界面上写信息: xx 客户名 -消息 群发/私聊如显现反常,向客户端发“接收失败”消息(可省)5 用户退出(1) 系统启动后,等待客户请求(2) 客户请求到,接受请求,分析确认是“用户退出请求”(3) 系统从谈天室删除客户,并通知其它用户“客户
14、退出”(4) 系统向客户端发“退出成功”(可省),关闭连接;谈天系统主要应用在局域网,在性能方面要求,客户到客户间消息传输时 间不大于 5s,传输牢靠性要求 95%的情形下,消息可以牢靠传到目的地,同时在线用户数量不小于 200;友情提示: 本需求分析只是分析了主要的用户使用情形,在对客户端进行分析时,谈天者是一个接口,服务方也是一个接口,在对服务端进行分析时,客户端是一个接口,服务方治理员是另一个接口;在接口处只关怀接口处的输入输出,并不关怀接口里面是如何实现的;例如客户端登陆用例分析时,客户发 “登录请求”信息到服务端,此时只需关注服务方返回情形,所以只需等待猎取服务端返回信息,而无需知道
15、服务方是如何处理的;服务方如何处理是在服欢迎下载精品学习资源务端登录用例中描述的;隐含需求的发觉;在登录用例中,客户和服务方都有登录用例,合作完成一个完整的登录过程,密码和用户名的验证一般都能想到,但限制用户数量, 同一用户不能重复登录就不太简洁想到,这里体会就会起作用,这是第一步, 想到了就要向客户提出(必要时说明),详细要不要做由客户准备,就是其次步;这里仍有一个度的把握,由于不行能任何情形都要向客户说明;体会如何来?学习前人的体会并运用到自己的工程开发中,体会转化为自己的东西应当是个有效途径;优先级的划分;作为谈天系统,其主要功能就是谈天,客户间相互发送消息,所以优先级最高的是客户端的发
16、送、接收、退出用例,服务器端的接收、退出用例;注册、登录用例次之;而公告、踢人、储存日志及谈天记录、个性化界面等又次之;优先级划分后,设计实现时,先做优先级高的,例如本系统,为了实现上述全部功能,可以分3 次迭代,第一次,实现高优先级的基本谈天功能,其次次实现注册和登录,第三次实现公告、踢人、储存日志及谈天 记录等;其核心是先实现最重要(用户观点)和最难的(开发者观点),这一 观点和日常思维相反,但却是有效防止风险和缺失的方法,由于必需的和难度 大的一开头就实现不了的话,工程可以准时转变,否就等到最终才发觉了难以 解决而又必需解决的问题时,缺失就会更大;当然在攻克重难点时,又可以采 用由易到难
17、的方法,逐步解决;一个是策略,一个是战术,思路相反,关键是 要运用得当;2.2.2 业务对象分析从上述的分析中,运用名词法,可以发觉出主要的业务对象:1 谈天者:属性:用户名、密码、确认密码、性别、年龄、电子邮件行为:登录、注册2 谈天客户端 :属性:消息、谈天者、界面行为:接收处理,发送处理、退出3 消息属性:消息类型、消息参数行为:创建消息、猎取消息类型、猎取消息参数4 服务器(相当于总服务台)属性: IP、端口、服务监控、消息处理者行为:监听、创建消息处理者、创建服务监控5 服务监控属性:服务状态,消息,谈天者列表、界面行为:发送服务方消息、关闭服务器6 消息处理者(相当于服务员) 属性
18、:连接( socket)、消息行为:处理消息 登录、注册、发送、接收、退出 ,收发消息友情提示: 业务对象是系统中对象的初步提炼,其属性和行为在后面仍会修欢迎下载精品学习资源改、变动,主要与业务相关,和详细的实现关系不大,是后面设计中业务类的基础,但实际类的数量或许会许多,由于在设计甚至在实现时都可能需要建立新的类以实现功能;不少讲分析设计的书并不提到这一步,而是在设计中直接给出类图,结果是一样的,但反映不出这些类是如何来的,假如你留意过程,可以看一下本节,假如你留意结果,直接看设计实现中的相关内容;2.2.3 验收测试要求测试环境:客户及服务器机操作系统: Window XP,内存: 512
19、M;客户端程序安装在客户机(至少2 台)上,通过以太网(网速至少10M)与服务器相连;前置条件:1 注册文件已创建但为空;2 客户及服务程序安装配置正确,能正常启动运行;3 客户程序与服务程序能通过网络互通;一 初始化数据1 客户端启动,进入注册界面,输入正确的注册数据,请求注册,查看服务端,看是否正确注册;2 重复 1,在另一客户端注册用户,留意不要重名;二 功能测试1 注册测试;( 1)测试重名注册;进入注册界面输入重名用户名,其它正确, 请求注册;( 2)测试空输入,进入注册界面,直接按注册按钮;(3)测试口令的一样性,口令长度,年龄及邮箱的数据有效性(详细测试用例设计可参考需求分析及详
20、细设计中的相关部分);2 登录测试;( 1)输入正确的口令和密码,按登录按钮(2)空输入,直接按登录按钮;( 3)分别输入用户名不正确但密码正确,用户名正确但密码不正确,用户名和密码均不正确,应均不能正确登录;(4)以同一用户名重复登录一次测试( 1)( 3)时要查看服务端的显示3 发送接收测试;( 1)进入收发界面,群发一条消息,观看其它客户是否收到消息,观看服务器有无相应显示 (2)私聊一条消息,观看指定用户是否收到消息( 3)无任何输入,直接按发送;( 4)退出系统,观看服务端显示,观看其它客户端是否已将该客户名删除;( 5)再启动客户端,登录进入收发界面,连续群发(至少 3 次),连续
21、私聊(至少 3 次),再连续群发,观看其它客户及服务方的显示是否正确;三 牢靠性测试1切断一客户至服务器的网络连接,分别进行注册、登录消息,客户端应能给出提示,而不是死机或退出,在正常谈天过程中,切断一客户端网络连接,客户程序应能给出提示;再接通网路,连续发送信息,应能正常运行;至少关闭并重启程序后,应能正常收发;同时观看其它客户及服务器收发、客户列表是否正常;2在正常收发中,强行关闭服务器,观看各客户端的反应;客户端应给动身欢迎下载精品学习资源送反常提示,不应退出或死机;四 性能测试(可选)编制一测试程序,作为客户端,登录进系统,向服务器按指定时间间隔群发消息;可同时启动多个发送线程(模拟多
22、个客户),同时向服务器群发消息;看在 200 个模拟客户( 200 个发送线程),每 1s 一个消息的情形下,服务器能否中意客户到客户传输时间小于5s 的要求;也可以考虑使用JMeter 压力测试工具;2.3 系统设计2.3.1 总体设计一 系统总体结构总体设计阶段主要是确定系统的体系结构和主要模块,明显系统分客户端子系统和服务器子系统;系统体系结构如图2 所示:客户 ATCP/IPTCP/IP收发界面业务规律网络通信谈天服务器监管界面客户 BTCP/IP聊 天 业 务 处理客户 C数据网络通信 拜望数据库 /文件图 2 系统体系结构图客户端可以划分成三子层,服务端也可以划分出三个子层,客户和
23、服务器间通信接受的是牢靠的 TCP协议;基本的谈天过程如下:0 客户端启动注册、登录后,进入收发界面,此时C/S 连接已建立, C 处于接收状态;1 客户 A 从界面输入消息,确定群发,业务规律层从界面猎取信息并验证后生成“消息接收请求”消息,再将消息作为参数调用网络通信层的发送函数, 发送函数将消息发往服务器,然后等待服务器的消息2 服务器收到消息,确定是客户A 发来的,从消息中分析出是群发,然后从当前客户列表中取出除 A 以外的与每个客户( B, C)对应的 socket ,然后通过socket 将消息转发给客户 B,C;3 服务器在监控界面上显示:客户A消息群发4 服务器生成“消息接收成
24、功”消息,向客户A回发(可省);5 客户 A 收到消息,确定是“消息接收成功”消息后,在界面上显示发送成功;6 客户 B/C 的通讯模块接收到消息,分析确认是“消息接收请求”,就在界面上显示:客户 A-消息 群发;不向服务器发送消息收到的确认消息;消息收发的简图如下图 3 所示:欢迎下载精品学习资源发送2.1 接收消息请求1 接收消息请求客户 A客户 B客户 C3 接收消息成功(可以不要)谈天服务器接收接收2.2 接收消息请求图 3 消息收发示意图体会共享: 下面是本人在网络编程方面多年积存的体会,感爱好的可以读一读;要不要回复消息?由于使用的是TCP 协议,可以保证点对点的牢靠传输, 所以最
25、简洁的情形是无需回复,在上图中取消3 也可以,客户 A 将消息发到服务器就认为已成功群发了消息,但如客户B、C 都断线,明显消息并没有成功群发;最复杂的是客户B、C 收到消息后也回复给服务器,服务器确认都收到回复后再向 A 回复;前者编程简洁、性能好,但对于某些反常情形不能牢靠处理, 后者编程复杂,性能差,但牢靠性高;这就要依据情形在上述冲突中折中,对于“谈天室系统”,对牢靠性要求并不高,即使消息有5%未收到,也没有大的问题,另外谈天者是处理各种不行靠问题的正确人选,实在不行,可由人重启系统(不会带来任何人身及财物缺失),另外本系统主要应用在局域网,而局域网的牢靠性是较高的;所以本文举荐接受无
26、回复方式;这适用于其它消息的处理;消息的收发方式?主要分两种,一种是推方式,例如客户 A 有了消息就直接发给服务器,这是推方式,即由数据源方直接将消息发给接收方;另一种是拉方式,即接收方主动向数据源请求猎取数据,例如服务器通过定期询问客户A 有许多据的方式,客户A 一旦有消息,就会发消息给服务器;明显这两种方式应用的场合是不一样的,上文中描述的是“推”方式, 客户 A 将消息发(推) 给服务器,服务器将消息再转发(推)给其它客户;数据源(客户A)的特点是消息的产生是不确定的(接收方难以知道发方何时有消息),产生就发是高效的方式,如服务器接受轮询的方式,一方面在大多数情形下会产生许多无谓的询问,
27、另一方面会降低服务器的性能(特殊是服务器可能成为整个系统的性能瓶颈,这就尤为重要),这里仍隐含了一个假设: 在谈天过程中,服务器始终等待消息的到来, B、C 也随时能接受消息,所以发送(推)一般是能成功的; 服务器向客户 B,C 推消息(相当于客户B、C 接收消息),是基于 B、C 都在预备接收的假设,这一点较之服务器始终牢靠运行的假设,其假设的有效性较低,由于客户方的行犯难以预料,可能客户重启了系统,可能突然断电等;服务器可能白发了消息(为保证消息发到客户,服务器会重复发送消息,造成性能缺失),由于它不知道客户是否在等着接收消息,这时可以考虑客户方主动接收消息,通过定期轮询的方式,向服务器要
28、数据,这时服务器就知道客户确定能接收消息,所以就发消息给客户,这种方式是“拉”方式;此方式较之服务器直接推,服务器性能上有所缺失,主要用于处理客户的轮询消息(较之重发消息,开支一般较小),客户方由于要轮讯,也缺失性能,但这对于客户端并不重要(其运算才能绝大部分情形下都足够),编码量上 C/S 均增加了,它的好处是假如多数情形下不能保证客户方始终在线,就服务方可以处理多次轮欢迎下载精品学习资源询,但只发一次消息给客户,较之不断的重发消息给客户(特殊是大量用户群发时)总体性能上是提高的;轮询时间的确定主要是在消息收发的准时性和性能影响之间取得平稳,周期过小,服务器处理压力大,周期过长,客户不能准时
29、收到消息,一般可取 2 5 秒;举荐的方式是“推”方式,由于“ Happy Chat ”应用于局域网,网络条件较好,且基于牢靠的TCP协议传输消息,本身对牢靠性要求也不高,详细说就是服务器向客户转发消息时,不管成功与否只发一次,客户向服务器发消息时,如出错,不会自动重发,但会给出提示,由谈天者准备是否重发(如再次按发送按钮);即认为在多客户谈天过程中服务器始终正常运行,客户端也始终正常;这样做以后,简化了设计编码,性能也得到提高;结论:系统接受无回复的“推”方式收发消息;二 服务器结构服务器端主要的模块和结构如图4 所示:AppServer.java为服务器端监听类,负责服务器的启动,包括启动
30、监听端口、服务器监控界面;ServerFrame.java 为服务器监控窗体,负责监控服务器运行状态,谈天内容,发送公告,踢人 Connection.java 为服务器连接处理的详细实现;WordFilter.java语言过滤类,处理非法谈天内容的过滤;(可选) 三 客户端结构客户端主要模块和结构如图 5 所示:图 4 服务器端结构图图 5 客户端结构图ChatClient.java 为客户端程序启动类,负责客户端的启动和退出;Login.java 为客户端程序登录界面,负责用户帐号信息的验证与反馈;Register.java 为客户端程序注册界面,负责用户帐号信息的注册验证与反馈;ChatR
31、oom.java 为客户端程序谈天室主界面,负责接收、发送谈天内容与服务器端的 Connection.java 亲热合作;欢迎下载精品学习资源Windowclose 为 ChatRoom.java的内部类,负责监听谈天室界面的操作, 当用户退出时返回给服务器信息;Clock.java 为客户端程序的一个小程序,实现的一个石英钟功能;(可选)2.3.2 详细设计2.3.2.1 客户端设计一注册模块程序将通过 Register.java 用户注册界面收集用户的用户名、密码、年龄、电子邮箱等;参考界面如图 6;图 6 客户端注册界面处理过程:当用户注册时,客户端的Register.java 界面收集
32、并验证了用户的注册信息后,封装成 Register_Customer类然后通过建立在 Socket 的连接之上的对象输 出流 将用 户注册 信息 发送给 服务 器端,服 务器端将请求转发给Connection 处理, Connection 在收到信息后将验证数据的完整性并在数据库中查找该用户名是否已经注册,然后将注册信息加入数据库,最终将注册结果返回给客户端;客户端显示结果(重名、成功、失败),并断开连接;验证要求如下:1 验证用户名是否为空即用户名的字符长度不为0,假如验证通过,就连续下面验证,否就返回“用户名为空”错误;2 验证密码是否为空即密码的字符长度不为0,假如验证通过,就连续下面验
33、证,否就返回“用户密码为空”错误;欢迎下载精品学习资源3 验证密码的一样性验证密码两次输入是否一样,假如验证通过,就连续下面验证,否就返回“密码两次输入不一样,请重新输入”错误;4 验证年龄是否为空即用户年龄的字符长度不为0,假如验证通过,就连续下面验证,否就返回“用户名为空错误”5 验证年龄的合法性即用户年龄介于 10 到 100 之间,假如验证通过,就进行连续下面验证,否就返回“用户年龄为空”6 验证电子邮箱的合法性即电子邮箱字符串必需有“” ,假如验证通过,就进行连续下面验证,否就返回“电子邮箱不合法”,二 登录模块程序将通过 Login.java 用户登录界面收集用户的用户名、密码,如
34、图7 所示;欢迎下载精品学习资源登录过程如下:图 7 客户端登录界面欢迎下载精品学习资源当用户登录时,客户端由 Login.java 界面收集并验证用户登录信息后,封装成 Customer对象类然后通过建立在 Socket的连接之上的对象输出流将用户登录信息发送给服务器端,服务器端将请求转发给Connection 处理, Connection 在收到信息后将验证数据的完整性并在对象型数据库中查找该用户名是否已经注册,然后将注册用户的信息与登录请求信息进行密码验证,在登录成功后将该用户添加到在线用户列表,最终将登录结果返回给客户端;假如登录成功,客户端将连续启动谈天室主界面;欢迎下载精品学习资源
35、验证要求:1 验证用户名是否为空即用户名的字符长度不为 0,假如验证通过,就进行连续下面验证,否就返回“用户名为空”错误 ,2 验证密码是否为空即密码的字符长度不为 0,假如验证通过,就进行连续下面验证,否就返回“用户密码为空”错误当以上信息验证成功时,客户端将打开与服务之间的Socket 连接,用对象输出流包装后将用户登录的信息发送给服务器端,并接收服务器处理完用户登录的信息;当客户端收到服务器返回的信息时,将会用信息对话框的形式告知用户是否注册成功,如成功就显示收发主界面ChatRoom,关闭 Socket连接;三收发模块当用户登录成功后,用户的登录界面将会消逝,然后创建用户谈天室窗口(如
36、图) ,在界面的标题栏将会显示当前登录用户的用户名,以防止一个机器上的用户开多个帐号进入谈天室后分不清哪个窗口是哪个用户登录的,界面第一行将显示当前服务器的在线人数;位于界面正中的两个控件分别是List 和TextBox 用来显示当前服务器上的在线会员名单列表和公共谈天信息;位于界面下方的就是一些用于谈天的功能控件和谈天内容个性化配置控件(可选);包括谈天对象、谈天语气、谈天内容、谈天字体、风格、大小、颜色1 用户发送信息当用户需要发送谈天信息时,可以在在线列表中选中谈天对象或者“全部人”,选择发言的语气,和是否私聊就可以发送谈天信息了;当用户点击完发送按钮后,程序开头将当前用户名、谈天对象、
37、谈天内容、谈天语气和是否私聊进行封装,然后猎取Socket 连接,再用对象输出流包装 Socket的输出流将谈天信息对象发送给服务器端;2 接收谈天信息接收用户的谈天信息是用一个单独的接收线程实现的,由于客户端必需随时接收服务器发来的消息,而读取消息的方法接受的一般是读直到有消息到欢迎下载精品学习资源来的“堵塞读”方式,如在大事处理程序中读(占用的是大事处理线程)就会使程序在此后无法响应用户操作,所以需要生成一个单独的线程特地用于读取处理消息;而发送消息的方法就是将消息放入操作系统的发送缓冲区后就返回的,所以发送执行的相当快,可以在大事处理线程中直接调用;发送和接收可以同时进行;当每次用户接收
38、到谈天信息后将会开头分析谈天信息然后将适合自己的信息显示在谈天信息界面上;收发界面如图 8 所示;图 8 收发界面图上的字体(个性化)、时钟、储存等是可选的功能,谈天者列表、谈天信息显示,谈天内容、私聊等是必需的;2.3.2.2 服务端设计功能描述:1. 接受用户注册信息并储存在一个基于文件的对象型数据库;2. 能够答应注册过的用户登陆谈天界面并可以谈天;3. 能够接受私聊信息并发送给特定的用户;4. 服务器运行在自定义的端口上 1888;欢迎下载精品学习资源5. 服务器监控用户列表和用户谈天信息(私聊除外);6. 服务器踢人,发送通知(可选);7. 服务器储存日志(可选);一 用户注册1.
39、去数据库读数据首 先创 建 一 个 File 文 件 类 , 载 入“ user.txt” , 再 用 对 象输 入流ObjectInputStream 包装 File 文件类,将储备在“ user.txt”得向量对象 Vector 中载入内存中,现在系统中的向量就是对象型数据库,储备着每条用户信息对象;2. 判定是否是第一个注册用户检测内存中的数据库对象集的当前容量是否为空,假如是 ,将收集的注册用户信息对象添加到数据库对象集中,然后直接写入数据库 ,否就连续进行其他判定;3. 判定用户名是否已经存在检测内存中的数据库对象集的中有没有和当前收集的注册用户名相同的记录,假如有,就退出检测,否就
40、连续下一个检测;4. 判定用户名是否为系统关键字检测当前收集的用户名是否为“全部人”,假如是,就退出检测,否就连续下一个检测;由于“全部人”这个名字会和系统发生冲突,用户发给全部人的信息将会使用“全部人”这个特殊用户名;5. 用户名有效后 写入数据库当前面的验证全部都通过的时候,将用户的注册信息对象添加到用户数据库中,然后创建文件输出流,再用对象输出流包装后写入本地文件将其长期化;最终关闭对象输出流和文件输入流;6. 给客户端返回信息将用户注册成功或失败的信息用打印流包装Socket 以后,输出给客户端注册结果的详细信息;7 在监管界面上显示信息,如图 9 所示;8.关闭 Socket连接当以
41、上的程序都正常运行后,需要关闭Socket 连接,否就将会铺张服务器欢迎下载精品学习资源与客户端之间的资源;二 用户登录1. 去数据库读用户数据打开用户数据库文件“ user.txt”,将用户数据对象集载入内存,以供下面的程序使用;2. 验证用户名是否存在在对象数据库中查找是否有与登陆用户的用户名相同的记录,假如有连续验证,否就退出验证处理,返回“没有此用户”错误;3. 验证用户密码是否正确假如有与登录用户的用户名相同的记录,接着判定密码是否正确;假如密码正确,连续验证,否就退出验证处理,返回“用户密码错误”;4. 验证用户是否已经登录在服务器的已登录用户列表中查找是否有该用户,假如有该用户,
42、退出验证处理返回“该用户已经登录”错误;否就连续下面的验证;5. 验证是否已经超过最大登录人数检测服务器的在线人数是否已经达到限制的最大人数,假如是,退出验证处理返回“当前服务器人数已满,请稍后再试”错误;否就连续下面的验 证;6. 返回客户端信息假如以上验证全部正确,就返回客户端“用户登录成功”;7 在监控界面显示信息,如图 9 所示8.关闭 Socket连接欢迎下载精品学习资源当以上的程序都正常运行后,需要关闭Socket 连接,否就将会铺张服务器与图 9 服务器治理界面客户端之间的资源;三 用户退出1. 接收退出信息当用户退出时,客户端将会用基于Socket 的对象输出流发给服务器退出对
43、象;2. 在线列表中删除用户用户退出后应当把用户从在线列表中删除,否就用户退出用户仍在在线列表中,那么该用户下次将会无法登录;3. 更新在线列表用户退出后将服务器端监控界面的用户列表更新;否就用户数据将会不欢迎下载精品学习资源同步;图 10 服务器用户信息治理界面四 接收转发用户谈天信息1. 接收用户谈天信息当用户发送谈天信息时,服务端将会收到客户端用Socket 传输过来的谈天信息对象,然后将其强制转换为Message对象;2. 过滤用户谈天内容的非法信息(可选)分析谈天信息对象的谈天内容,用语言过滤类将非法字符过滤掉;语言 过滤的时候将会打开“ badword.txt”文件,不答应显现的关
44、键词将会储备在文件中,关键字之间以逗号分割;当谈天内容中显现要过滤的关键字是将会被系统屏蔽,而谈天内容也将替换成“非法内容,系统屏蔽”;3 返回谈天信息然 后系 统从 Message 中 提出 消息 类型 , 再 依据 类 型 将 消息 强制 转化ChatMessage,调用 ChatMeaage 中方法,猎取目的客户名称列表,依据目的地欢迎下载精品学习资源用户名从用户名、 socket键值表中猎取 socket,再通过 socket将 Message转发到目的客户;Message定义如下: 1 消息类型接收消息请求,登录请求,登录响应,注册请求,注册响应2 猎取类型方法 getTypeCha
45、tMessage继承自 Message,增加如下属性:( 1).目的用户名列表( 2 ) . 用户 聊 天内 容; 相 应 的仍 有 LoginMessage、 LoginACKMessage 、RegisterMessage, RegisterACKMessage.LogoutMessage(客户退出)等客户方ARegisterMsgRegisterACKMsg服务方LoginMsgLoginACKMsg客户方XLoginMsgAcceptMsgAcceptMsgAcceptMsgAcceptMsgLogoutMsgLogoutMsgQuitMsgLogoutMsg图 11 通信协议交互图友情提示 :服务端接受一个“监听线程”负责监听连接请求,收到连接请求就创建 socket 及相应的处理线程,该线程在一个循环中通过socket 读取消息,分析处理消息,直到遇到“退出”消息或治理员命令,线程才退出;所以服务端是“单线程监听,多线程处理”的模式;体会共享: 详细设计时应用协议的设计是难点,要依据需要确定详细的消息种类,分清客户端发出哪些消息,接收哪些消息,服务端又发出哪些消息,接收哪些消息
限制150内