




已阅读5页,还剩36页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
本科生毕业论文(设计) 基于 java 的聊天系统的设计与实现 姓 名 学 号 专 业计算机科学与技术 指导教师 2015 年 5 月 30 日 i 摘 要 随着互联网的发展, 即时通讯工具正受到更大用户群体的青睐。即时通讯(instant messenger,简称 im)是指一种能够让使用者即时发送和接收互联网消息的实时通讯服 务。即时通讯的最大特点在于它的即时性,只需通信双方同时在线,就能像多媒体电话 一样,实现文字、档案、声音、影像等信息的互传。在网络环境的支持下,通信双方可 以便捷的实现信息交互,而不受物理距离的限制。因此即时通信系统在当今社会中有着 非常重要的地位。 本论文详细的论述了即时通讯系统的客户端和服务器端的主要组成模块,研究了各 系统模块的实现方式和具体设计方案,重点阐述了各模块的主要功能,并通过模块流程 图加以展示。系统采用面向对象和模块化的设计方法,主要运用了网络通信技术、数据 库技术、多线程技术等计算机相关技术,实现了文本通信、用户分组等功能,具有较强 的通信实时性。该系统基于 c/s 体系结构和 mvc 框架,使用 java 语言进行开发,实现 了多用户的即时通信。设计并实现了用户注册、登录、用户列表、多用户即时聊天等功 能。基于 swing 开发了较完整的图形用户界面(gui);通过套接字编程实现了通信功能。 在上述技术研究的基础上,本文构建了局域网环境下,面向普通用户的即时通讯系统, 该系统能够满足基本的通信需求。同时该系统采用模块化程序设计模式,因此具有较好 的系统扩充性。 关键词:即时聊天;socket;局域网;java ii abstract with the development of the internet, instant messaging tool is favored by more and more user groups.im (instant messenger, im) refers to a kind of real-time communication service which allows users to send and receive internet messages instantly.the biggest characteristic of instant messaging is its immediacy, just communication online at the same time, both sides can realize to send the information to each other like multimedia phone, such as text, archives, sound and image.with the support of network environment, both communication sides can easily realize the information interaction,which cant be restricted by physical distance.so instant communication system has a very important position in todays society. the paper discusses the main modules of the client and server side of the instant communication system detaily,studies the way of realization of each system module and the specific design, expounds the main functions of each module,and displays them by module flow chart.with strong real-time communication,the system adopts object-oriented and modular design method,mainly uses computer technology,such as the network communication technology, database technology and multithreading technology,and has realized the text communication,user group and other functions.the system is based on c/s architecture and mvc framework,uses java language development,and realizes the multi-user real-time communication.the system designs and implements the user registration, login, the user list, multi-user instant messaging,etc.based on the swing,the system developes a complete graphical user interface(gui).through socket programming,the system achieves the functions of communication.on the basis of the above technology researches,this paper constructs the instant messaging system,which is designed for ordinary users at the lan environment and can meet the basic communication requirements.at the same time,adopting the modularized program design patterns,the system has a good system expansion. key words: instant chat, socket, local area network, java 目 录 1 引言 .1 1.1 开发的背景 .1 1.2 开发的目的和意义 .1 1.3 研究的内容 .1 1.3.1 即时通讯原理 .1 1.3.2 swing 技术2 1.3.3 mvc 设计模式2 1.3.4 系统的构建 .2 2 涉及的相关技术 .3 2.1 java 语言.3 2.2 c/s 模式3 2.3 即时通讯原理 .4 2.4 mysql 数据库应用4 2.5 socket 通信技术.4 2.6 开发环境的搭建 .5 3 系统分析 .6 3.1 系统基本功能实现 .6 3.2 可行性分析 .6 3.2.1 技术可行性 .6 3.2.2 经济可行性 .6 3.2.3 操作可行性 .6 3.3 系统需求分析 .6 3.3.1 系统需求列表 .6 3.3.2 功能性需求分析分析 .7 3.3.3 非功能性需求分析.8 4 系统设计 10 4.1 数据库概要设计 10 4.2 系统模块设计 11 4.2.1 聊天系统工作原理 11 4.2.2 总功能模块 12 4.2.3 系统用例图 13 4.2.4 活动图 17 4.3 系统类设计 19 4.3.1 messagetype 类的设计.19 4.3.2 登陆类图的设计 19 4.3.3 服务端线程的设计 20 5 聊天系统实现 23 5.1 实现概况 23 5.2 注册模块 23 5.3 登录模块 26 5.4 聊天模块 29 5.5 添加删除好友模块 31 6 研究结论 34 6.1 总结 34 6.2 展望 34 参考文献 35 致谢 36 1 引言 1.11.1 开发的背景开发的背景 互联网和信息技术的快速发展,促使聊天工具成为重要的一种沟通工具,人们越来 越喜欢通过聊天工具来进行交流。现在,已近出现了很多很好很成熟的聊天工具,比如 说微信,腾讯 qq,易信,飞信等等。但是这些聊天工具功能太过强大,且是第三方通 信软件,面临着信息安全的问题。传统的交流方式列如电话电子邮件等,这些手段要不 费用太高,要么实用性不强,所以一些个人和企业等组织机构,为了满足自己和企业的 沟通需求,就自行研发即时聊天工具来代替传统的电话、传真、邮件等沟通方式。即时 聊天工具可以说成为继电话、e-mail 之后比较受欢迎的新应用,随着软件、网络、通 讯现代技术的快速发展,即时聊天工具在沟通、协作方面将显现出更大的方便、快捷、 实用的优势。 1.21.2 开发的目的和意义开发的目的和意义 随着计算机技术特别是计算机网络的快速发展,人们生活的方方面面得到了深刻的 改变。人们以低廉的价格,开发出实用、方便的聊天工具。各种在线服务系统正深刻的 影响着人们的联系和交流方式,希望可以远距离的进行即时通讯。现代生活在慢慢摆脱 过去的种种老旧的联系方式,网络聊天工具便应运而生,成为了一种方便消费者和人们 之间联系的实用系统。网上聊天系统的完善,为人们的交流与联系提供了一个平台。基 于 java 聊天工具的出现同时也解决了企业等机构内部交流不畅的问题,将聊天工具用 在内部交流上,同时缓解了员工面对面向领导汇报的压力,领导也拜托了繁琐的交谈, 双方都更加专注于自己的工作上。同时,聊天工具的作用日益强大,人们进行及时聊天 少不了网络通信技术。利用网络通信技术开发的聊天工具有很多,比如 qq 聊天工具就 是众所周知的聊天软件。最初通信工具的改进是由于人们的交流方式的改变而发生的, 但随着企业内部的通讯工具的出现,在企业管理中即时信息将发挥更大的作用,由此观 之,聊天工具的意义和价值已经不仅仅局限于进行交流与沟通了。 1.31.3 研究的内容研究的内容 1.3.1 即时通讯原理 首先打开服务器端的程序,建立 serversocket 等待客户端的登陆请求;客户端首 先进行身份的验证,如果用户名密码的格式正确则和服务器端建立 socket 连接,通过 服务器验证登陆信息是否和数据库的用户信息匹配,如果匹配则发送好友信息建立好友 列表。该用户查看自己的好友上线信息,进行通信,用户的每次通讯信息都会用 message 进行信息的打包,将打包好的 message 发送给服务器端,服务器端根据 messagetype 信息类型,再将信息转发给其他用户。这是一个典型的 c/s 模式。 1.3.2 swing 技术 java 的 swing 技术主要用于进行 ui 的的实现,包括对原型图的实现,以及包括对 事件的监听和消息的发送等,实际上的功能就是向用户展示界面和进行用户的交。对于 一个典型的 mvc 架构的系统,swing 主要实现了 view 层,在我的聊天系统中界面包括 有注册界面,登陆界面,好友列表界面,聊天界面,和开启服务器界面等。 1.3.3 mvc 设计模式 mvc 是一种典型的软件设计模式,m 代表的是 model 层,v 代表的是 view 层,c 代 表的是控制器层,主要是将代码分离,实现了用户交互的视图,业务逻辑,以及数据的 分离,有利于代码的扩充,和架构的搭建,也实现了软件设计高内聚低耦合的思想,将 相似的功能进行模块化,突出了面向对象的功能。其中,control 层是 view 和 model 进行连接的关键,其将数据进行模型化,然后交给控制器进行显示。 1.3.4 系统的构建 系统整体架构采用 c/s 模式客户端的所有请求都是通过服务器端进行处理,通过服 务器端对数据库的操作来响应客端的各种请求,mysql 作为数据库,mysql 既经济又实 惠。 2 涉及的相关技术 为了保证系统能正常实施,先来分析一下系统所需要的相关技术和协议。 2.12.1 javajava 语言语言 由于对 java 语言相对来说比较熟悉,所以选择面向对象的 java 语言来完成毕业设 计的软件部分,下面对 java 语言从技术的可行性方面做简要的介绍1。 java 语言的出现极大的提高了软件开发的效率,java 语言的三大特征封装,继承, 和多态。封装是面向对象最基础的特性,将属性和方法进行封装构成一个类,当真正使 用这些属性和方法来实现一些功能的时候,我们注意的不在是哪些属性和方法,而是一 个一个的对象,使用对象来实现这些方法,其实这也是高内聚的一种体现。继承则很好 的解决了代码的冗余问题,将不同类的相似功能进行抽象,组建成父类,让子类去继承 这些父类,就没必要再去写父类的属性和方法,很好的解决了代码的冗余问题。多态则 是很好的体现了软件设计的开闭原则的思想,对扩充开发,对修改关闭,说白了就是指 向父类的指针已经可以指向其子类,为了实现软件的开闭原则,能用子类的地方尽量用 父类来进行指代,便于对功能的扩充。 2.22.2 c/sc/s 模式模式 c/s 模式就是将一整个系统进行划分,包括客户端和服务器端,客户端主要用于和 用户的交互,而服务器端主要用于数据的管理和逻辑处理,从而提高整个系统的响应速 度和应变能力,从而提高用户的满意程度2。 通过相应的网络协议客户机和服务器之间来进行通讯,在服务器工作的情况下,客 户机会向服务器发出数据请求,然后服务器将数据传送给客户机进行部分计算,计算完 毕,计算结果可以返回给服务器。这种 c/s 模式的优点充分利用了客户机端的计算的性 能,使计算的能力得到很大提高;另外,由于是通过网络协议来进行客户机和服务器之 间的通讯,仅仅是一种逻辑上的相互联系,因此在客户机和服务器两端在物理上是易于 扩充的。c/s 模式是曾经很长一段时间主流的网络模式3。 在工作过程中该模式的主要过程如下: 首先开启服务器,并根据得到的请求进行相应服务回复: 1 首先在一个公认的 ip 地址上打开服务器端程序,同时通知本地的客户端程序,服 务器已经打开,然后等待客户端请求。 2 客户端发送自己的请求。 3 服务器端接受客户端的请求,并处理 客户端的请求。 4 返回第二步,等待其他客户请求。 5 没有客户端请求后,关闭该服务器。 客户端: 1 打开自己的通讯端口,并和特定的服务器端的端口建立连接,直到收到建立连接成 功的通知。 2 然后通过通信通道向服务器发送自己的服务请求报文,等待并接收服务器端应答; 然后继续提出请求。 3 请求结束并得到处理后关闭自己的通信通道并终止与服务器的连接。 客户机/服务器模式的特点是分布运算和分布管理,因此最后我选择了 c/s 模式。 2.32.3 即时通讯原理即时通讯原理 首先进行注册,注册成功后,用自己的账号和密码登陆聊天软件,登陆成功后即显 示出自己的好友列表,在线的好友则显示亮头像,不在线的好友显示灰色头像。双击好 友头像就会显示出与好友的聊天界面。 在聊天页面上,有输入信息框,和显示对话消息的面板,当需要发送消息时,在下 端的输入框中输入即将发送的消息,然后点击“发送”按钮,程序就会自动把输入的信 息内容、对方的 id 号,本人的 id 号、以及当前时间等内容打包成一个 message 对象通 过 socket 发送到服务器端。 当服务器接收到 message 之后,按照既定的 message 类型的协议进行解析和转发。 这样,双方就实现了即时通讯。 2.42.4 mysqlmysql 数据库应用数据库应用 使用 mysql 存储用户信息,借助于 navicate 界面工具对数据库进行快速的创建, 并采用 jdbc 技术对数据库的信息进行增删改查。使用 navicate 对其进行数据操作,可 以很大程度上增加数据操作的方便性5。 2.52.5 socketsocket 通信技术通信技术 socket 的工作原理: 1 首先是建立 socket 连接:在通信双方之间建立一条虚拟的通信通道,进行信息的 发送与接收。 2 数据通信:利用虚拟连接通道传送数据信息进行通信。 3 关闭:通信结束时,再将所建的虚拟连接拆除。 具体的通信过程如下: 1 启动服务器端程序,打开 serversocket 端口,监听客户端发送 socket 连接。 2 启动客户端,由已知 serversocket 端口和 ip 地址,向服务器请求建立 socket 连 接,服务器端接受 socket 后,单独开启一个线程用于处理该请求,然后继续监听 其他的客户端请求。 3 建立 socket 后,客服端服务器端通过 message 协议进行通信,首先 message 会将 各类消息打包成 message 包,然后发给服务器,服务器则根据 messagetype 中的信 息类型进行不同的处理,并回复给客户端。 4 不停的进行信息的读写,知道有一端终端连接。 socket 通信技术介绍如图 2-1 所示。 图 2-1 socket 通信技术 2.62.6 开发环境的搭建开发环境的搭建 使用 myeclipse10.0 进行软件开发,整体采用 c/s 模式,mysql 作为数据库,使用 navicat for mysql 进行数据库的信息添加。 3 系统分析 3.13.1 系统基本功能实现系统基本功能实现 客户端可以实现注册,即时聊天,添加好友,删除好友,显示好友在线状况等功能。 服务器端应当先特定端口建立一个 serversocket,并且不断监听是否有客户端建 立连接或者断开连接。服务器端应当是一个各类消息的发送中心,所有客户端的信息都 是通过 socket 连接传到服务器端,由服务器端根据各类消息的类型进行消息的分发。 3.23.2 可行性分析可行性分析 本系统的可行性分析包括以下几个方面的内容: 3.2.1 技术可行性 socket 技术和 swing 技术的使用,以及 navicate 的应用,包括 c/s 模式的采用, 可以快速的进行系统原型的设计,可以很方便的地开发出基于网络的高效、简便、实用、 的即时通讯系统, 3.2.2 经济可行性 基于计算机应用的计算机网络已经非常普及,因此对于网络设备不需要进行很大的 花费。本系统仅仅需要一个安装 mysql 数据库的服务器,由于受并发人数的限制,所以 成本不会很高。 3.2.3 操作可行性 在局域网中,只要有一台以上的计算机相互连接,本聊天系统就可以进行安装使用, 所以在操作上不会出现什么太大的问题。如果真正要实现 internet 上少许人员的通讯, 只需要在一个有固定 ip 地址的计算机上运行服务器端程序。 综上所述,即时通讯系统在技术、经济、操作上都是可行的。 3.33.3 系统需求分析系统需求分析 3.3.1 系统需求列表 经过对整个系统的分析,可得出如表 3-1 所示的系统需求列表。 表 3- 1 系统需求列表 编号执行者功能优先级 01 用户注册高 02 用户登陆中 03 用户聊天高 04 用户添加好友中 05 用户删除好友中 3.3.2 功能性需求分析分析 本系统要实现的功能如下: 1 注册 首先用户填写注册信息,填写完后提交,先在客户端进行基本信息的审查,然后将 信息提交给服务器。服务器收到用户的请求,便开始接受客户传递的 message 信息,比 如用户的 qq 号,昵称,密码,性别等信息,接受完毕后,便与后台数据库通过 jdbc 连 接,然后向数据库添加用户信息,如果添加成功,则通知用户注册成功,客户收到登陆 成功的信息后,便用该 qq 号和密码进行登陆。 2 登陆 用户填写登陆信息,比如号码和密码,然后与服务器建立连接,将登陆信息传送给 服务器,服务器收到后,开始通过 jdbc 读取数据库信息,然后与用户输入的登陆信息 进行比对,如果成功,客户端就向服务器请求读取好友信息,服务器收到该请求后,从 数据库中取出好友列表信息,然后将好友列表信息打包成 message 信息,通过通信协议, 然后向客户端发送这些信息,客户收到这些信息后就在主程序窗口中显示好友列表。 3 聊天 客户端首先在自己的信息输入框中填写自己即将发送的消息,然后点击发送按钮, 客户端接受到发送指令后将发送的信息打包成 message 信息,然后通过已经建立的 socket 接口将 message 信息发送给服务器端。服务器端接受到信息后在 socket 的 hashmap 中找到对应的接受者的 socket 连接然后将信息转发出去。这样就完成了一次 信息的接受与发送了,从而实现了聊天功能。 4 添加好友 在登陆的主界面,点击添加好友,然后输入好用号,点击添加,添加好友信息就会 被打包成 message 信息,通过 socket 发送给服务器。服务器接受后通过 jdbc 向 mysql 数据库的 personalinfo 表查询是否存在好友信息,如果查询成功,就会向客户端发送 添加成功信息,同时将好友信息添加到 friend 表中,如果查询失败,就会向服务器发 送添加失败信息。 5 删除好友 在登陆的主界面,点击删除好友,然后输入好友号,点击删除,删除好友信息就会 被打包成 message 信息,通过 socket 发送给服务器。服务器接受后通过 jdbc 向 mysql 数据库的 friend 表查询是否存在该好友,如果查询成功,就会向客户端发送删除成功 信息,同时在 friend 表中删除该条信息,如果查询失败,就会向服务器发送删除失败 信息。 3.3.3 非功能性需求分析 对于非功能需求,本系统只有界面上的需求。主要包括登录界面,如图 3-1 所示; 注册界面,如图 3-2 所示;好友列表界面,如图 3-3 所示。界面设计时,参考腾讯 qq、微信等的布局,采用蓝色与灰色搭配,使人看上去清楚明了。 图 3-1 登陆界面 图 3-2 注册界面 图 3-3 好友列表界面 4 系统设计 4.14.1 数据库概要设计数据库概要设计 本系统所包含的主要实体和其属性: personalinfo 信息表(用户账号,用户名,密码,性别,状态),其中 qnum 是用 户的账号,即 qq 号,是主键,不可为空,其他字段的详细介绍如表 4-1 所示7。 表 4- 1 personalinfo 信息表 编号字段说明字段类型长度是否为主键是否为空 01qnum qq 号 varchar20 是否 02petname 用户名 varchar20 否否 03password 密码 varchar20 否否 04sex 性别 varchar20 否否 05status 状态 varchar4 否否 personalinfo 信息表这个实体各个属性如图 4-1 所示。 图 4-1 personalinfo 信息表 friend 信息表(自己账号,好友账号),其中 myqno 和 friendqno 均不能为空。 表 4-2 friend 信息表 编号字段说明字段类型字段长度是否为主键是否为空 01myqno 我的 qq 号 varchar20 是否 02friendqno 朋友 qq 号 varchar20 是否 friend 信息表这个实体各个属性如图 4-2 所示。 图 4-2 friend 信息表 personalinfo 表和 friend 表的整体数据库 e-r 图如图 4-3 所示。 图 4-3 数据库整体 e-r 图 4.24.2 系统模块设计系统模块设计 4.2.1 聊天系统工作原理 此聊天系统的工作原理图描述如图 4-4 所示。 图 4-4 系统工作原理图 首先在局域网内打开服务器端程序,等待客户端的连接请求,客户端发送自己的连 接请求,服务器接受后会和客户端建立一个 socket 连接并将 socket 加入到自己的进程 map 中,然后客户端发送消息给服务器,服务器接受到消息后,将消息分解然后通过自 己再发送给接受者的客户端程序,至此一次通讯结束。 4.2.2 总功能模块 经过分析,系统的功能结构图如图 4-5 所示。 图 4-5 系统功能模块图 系统功能描述如下,服务器端开启和关闭服务器的功能,以及对数据库的操作,包 括增删改查的数据操作,客户端有注册,注册成功后有登陆、聊天、增加好友删除好友 等功能。 4.2.3 系统用例图 客户端系统的用例图,如图 4-6 所示。 图 4-6 客户端系统用例图 用户通过注册和登陆使用客户端系统的功能,首先必须注册成为该系统的用户,然 后登陆该系统进行聊天,以及添加好友和删除好友。 客户端注册用例分析如表 4-3 所示。 表 4- 3 客户端注册用例列表 用例标识号 01 用例名称用户注册 创建者* 创建时间 * 执行者 用户 说明用户填写注册信息,通过服务器验证后可以使用该系统 先决条件用户进入注册界面 请求结果系统将用户信息写入数据库 优先级h 使用频度h 普通过程 执执行行者者行行为为 1.点击注册 3.填写个人信息,完毕后点击确定 提交 系系统统响响应应 2.显示注册界面 4.系统校验用户的输入,如果合法,则会 进入数据库验证环节,如果验证成功, 则返回登陆成功信息 可选过程 例外 可选过程 1:用户注册验证不通过 1.1 系统继续保持注册界面,并显示错误提示信息“*”。 可选过程 2:用户注册信息不完整 2.1 系统继续保持注册界面,并显示错误提示信息“*”。 包括无 特定需求无 假设无 注释和问题无 用户登录用例分析如表 4-4 所示。 表 4-4 用户登录用例列表 用例标识号 02 用例名称用户登陆 创建者* 创建时间* 执行者用户 说明用户通过自己的账号和密码进入聊天系统,使用系统提供的聊天功能 先决条件用户已获得登录系统的账号和密码 请求结果登陆成功,显示好友列表 优先级 m 使用频度 h 普通过程执行者行为 1.用户输入用户名和密码,单击 确定“提交”,登陆系统 系系统统响响应应 2.系统校验用户的输入,如果合法, 则 2.1 转入系统的主界面 可选过程a:忘记密码 例外可选过程 1:用户登陆验证不通过 1.1 系统继续保持登录界面,并显示错误提示信息“*”。 可选过程 2:用户登陆信息不完整 2.1 系统继续保持登录界面,并显示错误提示信息“*”。 包括无 特定需求无 假设无 注释和问题无 用户登录后进行聊天,聊天用例分析如表 4-5 所示。 表 4-5 聊天用例列表 用例标识号 03 用例名称聊天 创建者* 创建时间* 执行者用户 说明系统用户进行聊天 先决条件用户已登录该系统 请求结果获得聊天信息 优先级h 使用频度h 执行者行为 1用 用户输入聊天信息,单击 “发送” 系系统统响响应应 2.接受用户的信息查找接受人 3.如果接受人在线 3.1 系统将信息发送给接受者 3.2 准备下一次输入 可选过程 例外可选过程 1:用户登陆验证不通过 1.1 系统继续保持登录界面,并显示错误提示信息“*”。 可选过程 2:信息接受者不在线 2.1 信息丢弃 包括无 特定需求无 假设无 注释和问题无 用户添加删除好友用例分析如表 4-6 所示。 表 4-6 添加删除好友用例列表 用例标识号 04 用例名称添加/删除好友 创建者* 创建时间* 执行者用户 说明用户可以通过系统添加或删除好友 先决条件该用户已经登陆该聊天系统 请求结果系统修改数据库的好友信息,并返回添加/删除好友成功 优先级m 使用频度m 普通过程 1.输入添加/删除好友的账号号 系系统统响响应应 2.检测该好友是否存在 3.如果存在,则 3.1 数据库的好友信息,并返回添加 /删除好友成功 可选过程 例外可选过程 1.好友不存在 1.1 返回添加/删除的错误信息“*” 包括无 特定需求无 假设 无 注释和问题无 4.2.4 活动图 1 用户登陆活动图 首先填写登陆信息,提交以后服务器会对用户名和密码进行验证。如果不正确,返 回一个提示信息。如果登陆成功,就更新在线状态。通知所有好友自己已经上线。如图 4-8 所示6。 图 4- 7 用户登录活动图 2 发送消息活动图 短消息发送以后,服务器端对应的监听线程会接收到一个数据包。此包中包含接收 者的信息,如果接收者在线,数据包将会转发到接收者。如果不在线,存在服务器端, 等它上线在发送。如图 4-9 所示。 图 4-8 发送消息活动图 4.34.3 系统类设计系统类设计 4.3.1 messagetype 类的设计 messagetype 规定了通信包的种类,相当于通信协议,对整个通信内容的转发都至 关重要。messagetype 类的内容如下: public interface messagetype string message_succeed=“1“;/表明是否成功 string message_login_fail=“2“;/表明失败 string message_comm_mes=“3“;/普通信息包 string message_get_onlinefriend=“4“;/要求在线好友的包 string message_ret_onlinefriend=“5“;/返回在线好友的包 string message_sql=“6“;/请求 sql 查询 string message_check=“7“;/请求验证登陆 4.3.2 登陆类图的设计 登录类图详细设计如图 4-10 所示。类图中的类说明如表 4-7 所示,方法说明如表 4-8 所示。 图 4-10 登录类图 表 4-7 类说明 类名说明 register 省略登陆界面的组件和按钮事件的处理方法 qqclientuser 登陆业务逻辑类,登陆信息查询 user 用户信息类,对用户信息进行封装 qqclientconserver 客户端连接服务器端类 表 4-8 方法说明 方法名说明 qqclientuser 类的 sql 方法将用户信息向 qqclientconserver 发送 qqclientconserver 类的 sendsqlinfotoserver 方法 将封装好的用户信息发送给服务器端 4.3.3 服务端线程的设计 服务器端的核心是对应客户的线程,每个 socket 对应一个线程,也就是每一个客 户端都在服务器端有一个相应的线程。它负责转发客户端发来的消息。类图设计如图 4-11 所示。类图中属性说明如表 4-9 所示,类说明如表 4-10 所示,方法说明如表 4-11 所示。 图 4-11 服务端线程类图 表 4-9 属性说明 属性说明 manageclientthread 类中的 hm 属性装有所有线程的静态 hashmap 表 表 4-10 类说明 类名说明 myserverframe 服务器端界面类省略组件 myqqserver 服务器端的控制类 qqserveruser 实现服务器端到数据库的控制层 sqlhelper 链接数据库接口 managerclientthread 具体的管理各个线程的添加删除 serconclientthread 服务器端线程类 表 4- 11 方法说明: 方法名说明 qqserveruser 类的 serinsertfriend 方法 增加好友的数据控制方法 qqserveruser 类的 serinsertpersonalinfo 方法 添加注册用户的数据控制方法啊 qqserveruser 类的 showfriend 方法返回好友信息 qqserveruser 类的 serdelfriend 方法删除好友信息的方法 qqserveruser 类的 checkuser 方法登陆信息验证的方法 serconclientthread 类的 serconclientthread 方法 线程的构造方法,创建服务器端线程 serconclientthread 类的 notifyother 方法 登陆之后发送给所有好友 sqlhelp 类的 sqlupdate 方法数据库更新方法 sqlhelp 类的 sqlquery 方法数据库查询方法 managerclientthread 类的 addclientthread 方法 向 hashmap 中添加线程 managerclientthread 类的 getclientthread 方法 向 hashmap 中得到具体的线程 managerclientthread 类的 getallonlineuserid 方法 得到所有在线线程的方法 5 聊天系统实现 5.15.1 实现概况实现概况 本系统可分为登录、聊天、文件、用户管理和注册五个功能模块。“登录”模块为 用户提供登录界面,并在用户登录显示好友列表;“聊天”模块实现用户的即时传送信 息,即多用户即时聊天,可以发送文字或者截图;“文件”模块主要实现一用户向另一 用户发送文件,对方可以选择接受或者拒绝。聊天记录会以文本文档格式保存。“用户 管理”模块即管理员对用户进行增删改查,和踢用户下线的操作。 下面详细介绍各个模块的具体实现。 5.25.2 注册模块注册模块 1 流程图 用户点击注册按钮,然后在注册界面填写用户信息,服务器验证完信息后,会将用 户信息写入数据库,用户可以通过该账号登陆系统。如图 5-1 所示。 开始 填写用户信 息 存入数据库 显示账号 结束 图 5- 1 注册模块流程图 2 关键代码 如下是注册界面的关键代码,jlabel 用来显示提示框,jtextfield 用来显示输入 的信息,最后的两个 button 用来触发事件,实现注册功能的代码如下: register 构造方法主要功能是实现界面,而 actionperformed 则对事件进行监听, 监听到 点击事件后用 qqclientuser 对信息进行包装并发送查询请求,如果查询成功则 显示添加成功对话框,如果查询失败则显示失败对话框,下面是实现注册界面的关键代 码: public class register extends jframe implements actionlistener jlabel jl1,jl2,jl3,jl4,jl5; jtextfield jtf1,jtf2,jtf5; jpasswordfield jtf3,jtf4; jbutton jb1,jb2; jpanel jp; public register() jl1=new jlabel(“qq 号码“,jlabel.center); jl2=new jlabel(“昵称“,jlabel.center); jl3=new jlabel(“性别“,jlabel.center); jl4=new jlabel(“密码“,jlabel.center); jl5=new jlabel(“确认密码“,jlabel.center); jtf1=new jtextfield(); jtf2=new jtextfield(); jtf5=new jtextfield(); jtf3=new jpasswordfield(); jtf4=new jpasswordfield(); jb1=new jbutton(“确定“); jb1.addactionlistener(this); jb2=new jbutton(“重置“); jb2.addactionlistener(this); jp=new jpanel(new gridlayout(6,2,4,4); jp.add(jl1); jp.add(jtf1);/号码 jp.add(jl2); jp.add(jtf2);/昵称 jp.add(jl3); jp.add(jtf5);/性别 jp.add(jl4); jp.add(jtf3); jp.add(jl5); jp.add(jtf4); jp.add(jb1); jp.add(jb2); this.add(jp); this.setsize(325,220); this.seticonimage(new imageicon(“image/头像.gif“).getimage(); this.settitle(“qq 用户注册“); this.setvisible(true); 下面是监听注册事件的关键代码: public void actionperformed(actionevent e) / todo auto-generated method stub if(e.getsource()=jb1)/确定按钮 qqclientuser qqclientuser=new qqclientuser(); user u=new user(); u.setoperation(“2“); u.setqum(jtf1.gettext(); u.setpetname(jtf2.gettext(); u.setpassword(jtf3.gettext(); u.setsex(jtf5.gettext(); u.setoperation(“3“); if(qqclientuser.sql(u) joptionpane.showmessagedialog(this, “添加成功 “,“,joptionpane.information_message); else joptionpane.showmessagedialog(this, “添加失败 “,“,joptionpane.warning_message); else if(e.getsource()=jb2)/重置按钮 jtf1.settext(“); jtf2.settext(“); jtf3.settext(“); jtf4.settext(“); jtf5.settext(“); 3 注册界面 每一个用户必须通过注册界面成为本系统的用户之后,才能使用该系统。登陆界面 包括 qq 号码,昵称,性别,密码,确认密码几个部分。注册界面如图 5-2 所示。 图 5- 2 注册界面 5.35.3 登录模块登录模块 1 流程图 登陆的时候,用户填写自己的登陆信息,包括用户账号和密码,然后将用户信息打 包成 message 信息发给服务器,服务器验证完用户信息后,如果符合则登陆成功,如果 不符合则登陆失败。具体流程图如图 5-3 所示。 开始 填写用户 信息 验证用户信息 验证用户 结束 接收离线 信息 成功 失败 发送登陆 失败信息 图 5-3 登录流程图 2 关键代码 (1) 客户端代码 登录事件是定义在 class imclientlogin extends jframe 这个类的监听事件中。 登录成功后,立即向服务器请求自己的好友列表,客户端实现登录功能的关键代码如下: 登陆界面布局代码如下: public void actionperformed(actionevent e) if(e.getsource()=jp1_jb1) qqclientuser qqclientuser=new qqclientuser(); user u=new user(); u.setqum(jp2_jtf.gettext().trim(); u.setoperation(“1“); u.setpassword(new string(jp2_jpf.getpassword(); public void actionperformed(actionevent e) if(e.getsource()=jp1_jb1) qqclientuser qqclientuser=new qqclientuser(); user u=new user(); u.setqum(jp2_jtf.gettext().trim(); u.setoperation(“1“); u.setpassword(new string(jp2_jpf.getpassword(); if(qqclientuser.checkuser(u) 下面是发送一个要求返回在线好友的请求的包,创建好友列表的代码: try qqfriendlist qqlist=new qqfriendlist(u.getqum(); manageqqfriendlist.addqqfriendlist(u.getqum(), qqlist); objectoutputstream oos=new objectoutputstream (manageclientconserverthread.getclientconserverthread(u.getqum().gets().g etoutputstream(); 以下代码是做一个 message 信息包: message m=new message(); m.setmesstype(messagetype.message_get_onlinefriend); 下面的代码指明我要的是这个 qq 号的好友情况: m.setsender(u.getqum(); oos.writeobject(m); catch (exception e1) e1.printstacktrace(); 同时关闭掉登陆界面关键代码如下: this.dispose(); else joptionpane.showmessagedialog(this, “用户名或密码错误 “,joptionpane.warning_message); else if(e.getsource()=jp1_jb2) new register(); (2) 服务端代码 这些代码被写在了一个线程 public class serverthread extends thread 中,这 样服务器就可以不停的监听端口,接收来自不同客户端的请求,建立 socket 连接,也 不会堵塞在主线程当中, 服务器端接收用户验证信息的关键代码如下: 从数据库中搜索好友的关键代码如下: public boolean checkuser(user u) boolean b=false; string sql=“select * from person
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 客运站安全管理制度
- 家乐福产品管理制度
- 家庭文件夹管理制度
- 应急器材库管理制度
- 归口领导与管理制度
- 影视中控室管理制度
- 微机课安全管理制度
- 心电图员工管理制度
- 快递员派送管理制度
- 怎样做电镀管理制度
- 2024届新疆维吾尔阿克苏地区小升初语文检测卷含答案
- MOOC 工科数学分析(一)-北京航空航天大学 中国大学慕课答案
- 汽车零部件生产过程大数据分析与管理
- 部编版《道德与法治》五年级下册第11课《屹立在世界的东方》教学设计
- 2023年新疆维吾尔自治区石河子市小升初数学试卷(内含答案解析)
- 初中地理七下8.3.2《撒哈拉以南非洲》教学设计
- 铝锭应用行业分析
- 湖北烟草公司招聘考试真题
- 心衰的中西医结合治疗
- 1000道100以内进位退位加减法题
- 公路技术状况检测与评定-公路技术状况评定
评论
0/150
提交评论