2020/2/251第12章聊天系统项目实训2本章综合运用前11章的相关概念与原理,设计和开发基于C/S模式的多线程网络程序—聊天系统。我们常见的QQ、飞信、迅雷、大智慧等软件都是多线程的网络程序。本章实训是实现类似腾讯的QQ系统的聊天功能,我们称为山寨版QQ系统。通过本项目实训的练习可以在掌握本书所学的知识外,培养学生的项目开发经验、团队精神和协作能力,增强学生的综合能力。3第12章聊天系统项目实训12.1C/S模式12.2项目需求分析12.3项目设计12.4项目简介12.5项目实现12.6常见问题及解决方案412.1C/S模式C/S(Client/Server,客户端/服务器)模式又称C/S结构,是20世纪80年代末逐步成长起来的一种模式,是软件系统体系结构的一种。C/S结构的关键在于功能的分布,一些功能放在前端机(即客户端)上执行,另一些功能放在后端机(即服务器)上执行。功能的分布在于减少计算机系统的各种瓶颈问题。C/S结构的优点是能充分发挥客户端PC的处理能力,很多工作可以在客户端处理后再提交给服务器,从而具有客户端响应速度快的优点。C/S模式是一种两层结构的系统,第一层在客户端上安装了客户端应用程序,第二层在服务器上安装服务器管理程序。在C/S模式的工作过程中,客户端程序发出请求,服务器程序接收并且处理客户端程序提出的请求,然后返回结果。C/S模式需要安装专用的客户端软件。例如,腾讯的QQ软件,要先安装后才能使用。5C/S模式有以下特点:C/S模式将应用与服务分离,系统具有稳定性和灵活性。C/S模式配备的是点对点的结构模式,适用于局域网,有可靠的安全性。由于客户端实现与服务器端的直接连接,没有中间环节,因此响应速度快。在C/S模式中,作为客户端的计算机都要安装客户端程序,一旦软件系统升级,每台客户端都要安装客户端程序,系统升级和维护较为复杂。6C/S模式的优势:首先,交互性强是C/S固有的一个优点。在C/S中,客户端有一套完整的应用程序,在出错提示、在线帮助等方面都有强大的功能,并且可以在子程序间自由切换。其次,C/S模式提供了更安全的存取模式。由于C/S是配对的点对点的结构模式,采用适用于局域网、安全性比较好的网络协议,安全性可以得到较好的保证。再次,采用C/S模式将降低网络通信量。最后,与比B/S模式相比,对于相同的任务,C/S完成的速度总比B/S快,使得C/S更利于处理大量数据。7第12章聊天系统项目实训12.1C/S模式12.2项目需求分析12.3项目设计12.4项目简介12.5项目实现12.6常见问题及解决方案812.2项目需求分析本项目实现了C/S模式的网络编程,项目分客户端和服务器端程序。服务器端程序需要实现的主要功能有,服务器管理、用户管理、客户端监听、系统配置、事务管理、数据库管理、文件下发、群聊管理等功能,类似和改进腾讯QQ服务器。客户端程序需要实现客户端登录、QQ号申请、增加好友、删除好友、多好友聊天、群聊、文件接收等功能,类似和改进腾讯QQ系统的客户端程序。工作过程是:启动启服务后,客户端即可连接服务器使用服务器开放的服务,如登录、注册、聊天等。服务器有管理客户端的部分权限可远程获得客户端数据或改变客户端配置。9服务器端。服务器运行后自动监听某个本地端口(本系统使用6666端口为客户端提供服务),并提供服务,直到系统管理员手动改变服务配置或关闭服务。服务器有客户端的部分控制权限,可远程获取客户端数据和配置。个别情况下还可赋予服务器截取客户端通信数据和屏幕画面的权利。客户端。客户端程序运行后为用户提供登录、注册等代理服务。客户端直接为广大用户服务,因此应要具有人性化的设计,和更多的功能模块。除了实现登录、申请号码、添加好友、与好友聊天等基本功能之外,本系统客户端还集成了文件接收、表情发送、群聊等功能。10第12章聊天系统项目实训12.1C/S模式12.2项目需求分析12.3项目设计12.4项目简介12.5项目实现12.6常见问题及解决方案1112.3项目设计12.3.1服务器端设计12.3.2客户端设计12.3.3服务器和客户端通讯协议设计12.3.4表的设计1212.3.1服务器端设计一台计算机运行的服务器只能有一个(本系统不考虑多服务器协同工作的可能),但可能有众多客户端连接。这样,客户端的同时连接和不同时连接、多客户端请求服务的同时响应、拦截非法消息和客户端数据的管理都要在服务器设计之初有完善的解决方案,因为这将影响到服务器的稳定性和执行效率。如果处理不好,轻则导致服务器崩溃,重则造成计算机数据丢失。13因此,服务器的设计需要注意以下几点:并发响应。当有多客户端同时连接或请求某服务时,服务器应同时响应以提高服务器的响应速度,但同时也要对本地数据的安全性进行严格保护。这样对于服务器而言,用好的数据结构管理客户端连接就显得很重要。垃圾过滤。服务器运行期间,严格监控来自客户端的消息,垃圾消息一概丢弃。非法消息过滤。服务器运行期间,严格监控来自客户端的消息,当接收到非法消息时提示给系统管理员,以使管理员得知系统当前正遭受怎样的攻击,并采取相应的措施。14服务器功能模块有服务器的管理模块(开启服务、暂停服务,注册和登录控制);客户端的管理模块(文件发送,客户端监控,群聊控制等等),自身的安全性检测模块(系统跟踪)。对服务器,稳定安全最重要,因此界面只有一个。用标签化窗格把各个功能模块分开,可以借助NetBeans封装组件“拖拉”实现。服务器作为该系统的核心,管理众多(这得看有多少客户端连接)客户端。于是服务器必须具有一般管理软件的共有特性,即具有客户端的部分管理权限。对本系统而言,向单个或多个客户端发送消息、文件,强制注销单个或多个用户,重置单个或多个用户密码,单播或广播消息,截获客户端数据等就是上述特性的具体表现。1512.3项目设计12.3.1服务器端设计12.3.2客户端设计12.3.3服务器和客户端通讯协议设计12.3.4表的设计1612.3.2客户端设计客户端的定位是为广大使用聊天系统的用户提供代理服务,因此除了一般系统设计中的稳定性、健壮性等要求外,还要有安全性、多功能和人性化设计等方面的考虑,尤其是安全方面,应该严格管控。客户端系统设计应考虑的因素:稳定性。稳定性是每个程序设计人员必须保证的最低目标。稳定性不仅是保证用户数据安全性的必须条件,而且能让用户直观地感受到程序设计的完善性,从而增加用户对系统的信赖。健壮性。为了数据的安全及其它方面的考虑,健壮性很重要。安全性。这里所说的安全性更多是指客户端与服务器通信过程的安全控制。拦截客户端向服务器发送垃圾或非法的消息,以使非法人员不能利用客户端漏洞对服务器进行攻击,保证服务器的安全稳定运行。多功能。这一点显得尤为重要,一个程序要使用户喜欢,除了上述几点,多功能的设计也将为系统功能更加完善。人性化。程序是用户使用的,如果一个程序不能让用户在使用过程中感到得心应手,它将不能赢得用户青睐,最后的结果是,该程序提前“退休”。17客户端要有登录界面供用户登录,要有注册界面供用户注册,要有登录等待界面(类似QQ,在长时间登录时这将对降低用户对系统不满起到很好的作用)缓冲并提示登录结果(这里说的是登录不成功时的具体原因),登录成功要有主界面供用户管理自己的数据,如身份信息、好友信息、文件、聊天等等。1812.3项目设计12.3.1服务器端设计12.3.2客户端设计12.3.3服务器和客户端通讯协议设计12.3.4表的设计1912.3.3服务器和客户端通讯协议设计服务器和客户端的界面设计好后,接下来并不是填充实际的控制代码,因为还有一个很重要的事要完成,就是编写客户端与服务器的通信协议。通信协议(communicationsprotocol)是指双方实体完成通信或服务所必须遵循的规则和约定。协议定义了数据单元使用的格式,信息单元应该包含的信息与含义,连接方式,信息发送和接收的时序,从而确保网络中数据顺利地传送到确定的地方。通信协议说的太复杂了,其实就是双发约定一些“暗号”,以便于双方在通信过程中进行消息的封装和解析,了解对方的意图。表12-1给出本项目的部分通信协议内容。202112.3项目设计12.3.1服务器端设计12.3.2客户端设计12.3.3服务器和客户端通讯协议设计12.3.4表的设计12.3.4表的设计2212.3.4表的设计根据以上需求本项目所需的表格有:chat表(所有注册用户的信息都存储在此表中)、friend表(存储各个用户的好友信息)。以上两张表是固定的,一直存放数据库中,还有一张动态表,online表(在线用户身份信息),存储在线用户身份信息,服务器启动时建立,退出时删除。表12-2~12-4设计仅供参考,读者可根据实际业务需求自行设计。2324第12章聊天系统项目实训12.1C/S模式12.2项目需求分析12.3项目设计12.4项目简介12.5项目实现12.6常见问题及解决方案2512.4项目简介项目全称:聊天系统—山寨QQ。项目开发平台:JDK1.6(因项目实现了不规则窗体和可调的窗体透明度,只有JDK1.6update10以后的版本中才有这些组件,因此,服务器的运行平台需要JDK1.6update10以上版本)。项目开发工具:Netbeans6.9.1项目数据库:Mysql5.0和NavicatV8.2.12ForMySQL(MySQL管理工具)。设计的表如图12-1、12-2、12-3所示。如果不熟悉MySQL,可选择自己所熟悉的数据库。图12-3是friends表的设计。项目运行系统:Java是跨平台的,因此,这里的运行系统不限。项目服务器端设计13个类:约3500行代码。如图12-4所示。项目客户端设计18个类:约6500行代码。如图12-5所示。262728293031项目测试参数:服务器启动时间平均2s(秒)。客户端启动时间平均1.5s(秒)局域网内用户登录的最长时间为2s(秒)。最低时系统资源占用平均仅为2%。服务器端可登录客户端数量无限(理论分析可以登录无限个用户,但因条件有限并未实际测试过)。文件传送的最高速度10.16M/s(秒)。以上均为测试后数据统计的结果,运行系统环境不同,测试的结果有可能有差异。32第12章聊天系统项目实训12.1C/S模式12.2项目需求分析12.3项目设计12.4项目简介12.5项目实现12.6常见问题及解决方案3312.5项目实现编码34