毕业设计(论文)-基于Java的仿QQ聊天系统.doc_第1页
毕业设计(论文)-基于Java的仿QQ聊天系统.doc_第2页
毕业设计(论文)-基于Java的仿QQ聊天系统.doc_第3页
毕业设计(论文)-基于Java的仿QQ聊天系统.doc_第4页
毕业设计(论文)-基于Java的仿QQ聊天系统.doc_第5页
已阅读5页,还剩35页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

jishou university 专业课课程论文 题题 目:目:基于 java 的仿 qq 聊天系统 “mini q”的设计与实现 作作 者:者: 学学 号:号: 所属学院:所属学院:信息科学与工程学院 专业年级:专业年级: 总总 评评 分:分: 完成时间:完成时间: 吉首大学信息科学与工程学院吉首大学信息科学与工程学院 基于 java 的仿 qq 聊天系统“mini q”的设计与实现 摘 要 随计算机网络的迅速发展,对人类社会诸多领域产生了巨大的影响。尤其是, 随着信息时代的来临,人与人之间愈来愈趋向于通过网络来交流和传递信息。而聊 天系统正是当前人们使用最多的中介。在这个平台上,许多认识或不认识的人们彼 此间能够随意的相互交流。因此,开发和架构这种平台符合时代发展的需要。 本系统在开发中用到了局域网通信机制的原理,通过直接继承 thread 类来建 立多线程。开发中利用了计算机网络编程的基本理论知识 cp/ip 协议、客户端/服 务器端模式(client/server 模式)、网络编程的设计方法等。在网络编程中对信 息的读取、发送,是利用流来实现信息的交换,其中介绍了对实现一个系统的信息 流的分析,包含了一些基本的软件工程的方法。 关键词:socket;客户端;服务器端;thread;链接(connection) 目 录 第一章引言 .2 1.1 课题背景、意义及现状.2 1.2 涉及的相关技术及协议 2 1.2.1 java 语言 .2 1.2.2 c/s 模式介绍 3 第二章系统分析 .4 2.1 可行性分析 4 2.2 需求分析 4 2.2.1 功能分析 .4 2.2.2 性能分析 .6 2.2.3 用例图 .6 2.2.4 时序图 .6 2.2.5 活动图 .7 第三章总体设计 10 3.1 功能模块图 .10 3.2 数据库设计 .11 3.2.1 e-r 图.11 3.2.2 表结构设计 13 3.3 类图16 第四章 详细设计及实现.17 4.1 界面设计 .17 4.2 数据输入输出设计 .21 4.2.1 数据输入 21 4.2.2 数据输出 21 4.3 代码实现 .21 4.3.1 服务器端设计 21 4.3.2 传递包的设计 24 4.3.3 聊天客户端设计 25 4.3.4 文件传输设计 26 第五章 系统测试28 5.1 注册测试 .28 5.2 登陆测试 .28 5.3 私聊测试 .29 5.4 群聊测试 .30 5.5 文件传输测试 .31 结论.33 参考文献.34 基于 java 的仿 qq 聊天程序“mini q”的设计与实现 2 第一章第一章引言引言 1.1 课题背景、意义及现状 交流对于人类社会及其每个成员都至关重要。直接交流的方式包括语言、 文字等,而远程交流还需借助于一些先进的工具如电话、网络等。本课题研究 的是支持内部网络交流的系统。当今主流的即时聊天工具有qq,msn messenger,yahoo messenger等,国内最热门的当属qq, qq是深圳市腾讯计算 机系统有限公司开发的一款基于internet的即时通信(im)软件。腾讯qq支持 在线聊天、视频电话、点对点断点续传文件、共享文件、网络硬盘、自定义面 板、qq邮箱等多种功能,并可与移动通讯终端等多种通讯方式相连。1999年2月, 腾讯正式推出。第一个即时通信软件“腾讯qq”,qq在线用户由1999年的2 人(2人指马化腾和张志东)到现在已经发展到上亿用户了,在线人数超过一亿, 是目前使用最广泛的聊天软件之一。qq不仅仅是简单的即时通信软件,它与全 国多家寻呼台、移动通信公司合作,实现传统的无线寻呼网、gsm移动电话的短 消息互联,是国内最为流行功能最强的即时通信(im)软件,使qq不仅仅是单 纯意义的网络虚拟呼机,而是一种方便、实用、超高效的即时通信工具。qq可 能是现在在中国被使用次数最多的通讯工具。 它可以在 2000/xp/2003/win7/win8操作系统下运行,是十分灵活的网络寻呼工具。它会 自动检查您是否已联网,如果您的电脑已连入internet,可以搜索网友、显示 在线网友,可以根据qq号、昵称、姓名、email地址等关键词来查找,找到后可 加入到通讯录中。当您的通讯录中的网友在线时,qq中朋友的头像就会显示在 线,根据提示就可以发送信息,如果对方登记了寻呼机或开通了gsm手机短消息, 即使离线了,您也可及时将信息传递给您的好友。 虽然以上这些软件是免费的,并且功能越来越强大。但是它们的唯一的不 足就是必须要联网或者下载到它们的服务端,要不然是没法脱离intenet使用的。 为了能在一个没有连接到intenet的局域网使用聊天工具,那就必须要有服务器 端。本系统就是包括服务器端与客户端,可以在局域网聊天的一个工具。 1.2 涉及的相关技术及协议 1.2.1 java 语言 经过认真的讨论分析,综合各种计算机高级语言的特征和适应范围,最终 基于 java 的仿 qq 聊天程序“mini q”的设计与实现 3 决定选择纯面向对象的 java 语言来完成课题的设计,下面就技术可行性方面, 对 java 语言作一简要介绍。sun 公司的口号就是“网络就是计算机” ,java 能 使所有东西从桌面计算平稳的转 变为基于网络的计算,它是专门为此而建立的, 并显然是为了完成这个任务而来的。使用 java 语言,可以相对轻松的一天编 写一个有条理的网络程序。今天,java 的网络 功能正在飞跃发展,不断有新的 特性增加到这个有价值的基础上,javasoft 实验室正 在不断努力使 java 更加 完善。就 java 语言的主要特点,本人归纳如下:java 程序设计的开发过程与运 行环境 java 是解释型的高级编程语言,所以 java 程序的开发通常需要经过编 写源程序、 编译生成字节码和运行三个过程。 这里要提到,java 应用程序的 开发周期包括编译、下载、解释和执行几个部分。java 编译程序将 java 源程序 翻译为 jvm 可执行代码字节码。这一编译过程同 c/c+的编译有些不同。 当 c 编译器编译生成一个对象的代码时,该代码是为在某一特定硬件平台运行 而产生的。 因此,在编译过程中,编译程序通过查表将所有对符号的引用转换为特定 的内存偏移量,以保证程序运行。java 编译器却不将对变量和方法的引用编译 为数值引用,也不确定程序执行过程中的内存布局,而是将这些符号引用信息 保留在字节码中,由解释 器在运行过程中创立内存布局,然后再通过查表来确 定一个方法所在的地址。这样就有效的保证了 java 的可移植性和安全性。 1.2.2 c/s 模式介绍 20 世纪 90 年代出现并迅速占据主导地位的一种计算模式为客户机/服务器 模式,简称为 c/s 模式,它实际上就是把主机终端模式中原来全部集中在主 机部分的任务一分为二,保留在主机上的部分负责集中处理和汇总运算,成为 服务器;而下放到终端的部分负责为用户提供友好的交互界面,称为客户机。 相对于以前的模式,c/s 模式最大的改进是不再把所有软件都装进一台计算机, 而是把应用系统分成两个不同的角色和两个不同的地位:一般在运算能力较强 的计算机上安装服务器端程序,而在一般的 pc 上安装客户机程序。正是由于 个人 pc 机的出现使客户机/服务器模式成为可能,因为 pc 机具有一定的运 算能力,用它代替了上面第一种模式的哑终端后,就可以把主机端的一部分工 作放在客户机端完成,从而减轻了主机的负担,也增加了系统对用户的响应速 度和响应能力。客户机和服务器之间通过相应的网络协议来进行通讯。客户机 向服务器发出数据 请求,服务器将数据传送给客户机进行计算,计算完毕,计 算结果可返回给服务器。这种模式的优点充分利用了客户机的性能,使计算能 力大大提高;另外,由于客户机和服务器之间的通讯是通过网络协议进行的, 是一种逻辑的联系,因此物理上在客户机和服务器两端是易于扩充的。c/s 模 式是目前占主流的网络计算模式。该模式在操作过程中采取的是主动请示方式: 首先服务器服务器方要先启动,并根据请示提供相应服务(过程如下) : (1)打开一个通信通道同时通知本地主机,服务器愿意在某一个公认地址上 接收客户请求。 基于 java 的仿 qq 聊天程序“mini q”的设计与实现 4 (2)等待某个客户请求到达该端口。 (3)接收到重复服务请求,处理该请求并发送应答信号。 (4)返回第二步,等待另一客户请求。 (5)关闭该服务器。 客户端:客户端: (1)打开一个通信通道,并连接到服务器所在主机的特定端口。 (2)向服务器发送服务请求报文,等待并接收应答;继续提出请求。 (3)请求结束后关闭通信通道并终止。 分布运算和分布管理是客户机/服务 器模式的特点。最后选择了 c/s 模式。 基于 java 的仿 qq 聊天程序“mini q”的设计与实现 5 第二章第二章系统分析系统分析 2.1 可行性分析 (1)经济可行性:本系统需要一个 oracle 数据库服务器,由于使用人数比较少, 安装一个免费的 oracle 数据库完全可以应付需要,所以成本就不用考虑了。 (2)操作可行性:只要一台以上计算机连接在同一个局域网内,本系统就可以 安装使用,所以操作上完全不存在问题。 (3)技术可行性:本系统采用 java 语言,是基于 cs 架构的。开发这个系统需 要开发者对 socket 编程和 java swing 这两方面的技术比较熟。由于本人长 期从事于 java 语言编程,所以技术方面是可行的。 2.2 需求分析 2.2.1 功能分析 本系统要实现的功能如下: 1)注册 服务器收到用户的注册请求,便开始接受客户传递的信息,诸如客户的呢 称,性别,籍贯,个人资料等,接受完毕后,便通过jdbc-odbc与后台数据库连 接,然后向数据库添加记录,如果成功,便向客户返回其号码。客户收到服务 器返回的信息后,便打开主登陆窗口。 2)登陆 在客户端,用户输入其号码和密码,然后建立与服务器的连接,告诉服务 器我要登录,服务器收到后,开始通过jdbcodbc读取数据库,然后与用户输入 的信息比较,如果成功,便打开主程序窗口。然后客户向服务器请求读取好友 名单,服务器收到该请求,开始读取数据库中的表,得到好友的号码后,再在 icq表中读取好友资料,然后向客户端发送这些信息,客户收到后就在主窗口显 示好友,并且建立几个矢量(vector)用以存储好友的呢称,号码。 3)私聊 基于 java 的仿 qq 聊天程序“mini q”的设计与实现 6 私聊就是两个聊天。客户端首先发送消息到服务器端,服务器端根据发送 人信息和接收者信息来转发。例如服务器接收到一个a发给b的消息先判断b是否 已经在线,如果在线就将信息发送过去。b接收到a发来的信息,如果是未建立 对话窗口,就询问是否建立对话,否则就丢弃信息。 4)群聊 群聊,就是多人一起聊天。过程与私聊差不多。唯一的不同就是服务器会 将信息转发给指定群的所有成员。 5)创建分组 用户注册以后默认的好友分组只有一个。用户在执行添加分组操作以后, 客户端分将一个这个动作的信息发送给服务器端(主要是fromclientlisten) 。 服务器端的fromclientlisten接收到这个请求,会进行数据库操作,将要添加 的分组信息插入到数据库中。如果成功,则返回这个分组的信息给客户端,否 则返回错误提示信息。 6)创建群 用户注册以后群个数为0。用户在执行添加群操作以后,客户端分将一个这 个动作的信息发送给服务器端(主要是fromclientlisten) 。服务器端的 fromclientlisten接收到这个请求,会进行数据库操作,将要添加的群信息插 入到数据库中。如果成功,则返回这个群的信息给客户端,否则返回错误提示 信息。 7)查找好友并加为好友 输入要查找的用户id号,客户端发送一个查询信息给服务器端,如果找到 就返回用户服务信息。打开一个用户信息显示界面,该界面会提供一个“添加 为好友”按钮,点击后可将此人加为好友。如果未找到,弹出一个信息提示框。 8)查找群并加入群 输入要查找的群id号,客户端发送一个查询信息给服务器端,如果找到就 返回用户服务信息。打开一个群信息显示界面,该界面会提供一个“加入此群” 按钮,点击后可将此人加为好友。如果未找到,则弹出一个信息提示框。 9)文件共享 在启动文件传输服务器的共享文件功能之前,要设置它的ip号和端口,如 果设置不好。好友将无法下看到这些共享的文件。还有一个重要的步骤就是添 加共享文件或目录。最后启动文件共享。 10)下载文件 使用文件传输的客户端要正确配置好服务器的ip和端口号,以及下载好的 基于 java 的仿 qq 聊天程序“mini q”的设计与实现 7 文件的存放目录。如果其中之一配置不好,文件下载将会失败。设置好以后, 点击“连接”按钮,如果配置正确,这时将会看到服务器共享的文件。目前不 能支持文件夹下载,当看到一个文件夹以后,可以双击该文件夹并查看文件夹 里面的文件。 2.2.2 性能分析 本系统由于采用免费的 oracle 数据库软件,连接数最多不能超过 200,所 以并发访问数据库的人数不能超过 200 人。 2.2.3 用例图 2.2.4 时序图 客户登陆、注册时的服务器端时序图 基于 java 的仿 qq 聊天程序“mini q”的设计与实现 8 本图说明: 服务器接每次与一个客户连接以后,就会去创建一个监听线程。通过线程 来接收客户端发送的所有数据。如果要查询数据库,监听线程会请求获得一个 数据库连接.如果数据库连接已经获得,就把连接交给 dboperation 对象,通过 此对象可以返回给监听线程必要的结果。最后监听线程会通过 socket 将结果返 回给客户端。 2.2.5 活动图 1)用户登陆 活动图 (见右图) 基于 java 的仿 qq 聊天程序“mini q”的设计与实现 9 本图说明:首先填写登陆信息,提交以后服务器会对用户名和密码进行验 证。如果不正确,返回一个提示信息。如果登陆成功,就更新在线状态。通知 所有好友自己已经上线。 2)客户之间的通信活动图 本图说明:短消息发送以后,服务器端对应的监听线程会接收到一个数据 包。此包中包含接收者的信息,如果接收者在线,数据包将会转发到接收者。 如果不在线,就写入数据库。 3)客户之间的文件传送活动图 本图说明:客户端向服务器发送文件下载请求。如果服务器端同意下载,就 读取文件流并将数据流写入到客户端。客户端读取到文件名之后,立刻创建一 个新的文件并将读取的数据写入到文件中。 基于 java 的仿 qq 聊天程序“mini q”的设计与实现 10 4)新增好友活动图 根据好友 id 号查找好友,如果此 id 存在,就将用户信息发送到客户端。 同时将好友关系写入到数据库。 基于 java 的仿 qq 聊天程序“mini q”的设计与实现 11 5)删除好友活动图 此图说明:客户向服务器发送删除好友请求。服务器接收到删除好友请求 以后,将好友关系从数据库中删除。 基于 java 的仿 qq 聊天程序“mini q”的设计与实现 12 第第三三章章总体设计总体设计 3.1 功能模块图 本系统主要由由两个子系统组成: 1)文件传输系统;2)聊天子系统。 文件传输系统的功能主要有: 1)共享文件;2)查看并下载文件。 聊天子系统的功能有: 1)注册;2)登陆;3)添加群;4)查找群; 5)私聊;6)群聊;7)查看好友资料;8)查找好友; 9)添加好友;10)创建好友分组。 基于 java 的仿 qq 聊天程序“mini q”的设计与实现 13 3.2 数据库设计 3.2.1 e-r 图 用户表(qquser): 属性:id,account(登陆账号),pwd,nickname,sign(个性签名), sex,email,head(头像) 关系: 一个用户可以有多个好友分组。 一个用户可以有多个群。 一个用户可以有多条留言。 基于 java 的仿 qq 聊天程序“mini q”的设计与实现 14 好友分组表(qqperson_group): 属性:id,userid(创建者 id),name(分组名) 关系:一条记录只对应一个用户,但是可以拥有多个组成员。 群表(qqpublic_group): 属性:id,userid(创建者 id 号),name(群名),sign(群公告) 关系:一个群只有一个创建者,但是可以拥有多个群成员。 3.2.2 表结构设计 客户信息表(qquser) 1 自动 id 号 id 整数 2 用户账号 account 整数 3 用户密码 pwd 字符 4 用户昵称 nickname 字符 5 用户签名 sign 字符 6 用户性别 sex 字符 7 用户邮箱 email 字符 8 用户头像 head 字符 基于 java 的仿 qq 聊天程序“mini q”的设计与实现 15 qq 消息表(qqmessage) 1 自动 id id 整数 2 发信人 account_from 整数 3 收信人 account_to 整数 4 发送内容 content 字符 用户分组表(qqpersongroup) 1 自动 id id 整数 2 拥有者 id userid 整数 3 分组名称 name 字符 公共群表(qqpublic_group) 1 自动 id id 整数 2 创建人 userid 整数 3 群名称 name 整数 4 群的公共消息 sign 字符 用户与群的中间表(qquser_publicgroup) 1 自动 id id 整数 2 加入的群 id groupid 整数 3 加入的用户的 id userid 整数 用户与分组的中间表(qquser_persongroup) 1 自动 id id 整数 2 加入的分组的 id groupid 整数 3 加入分组的用户的 id userid 整数 以上各表创建的代码如下: 1)创建用户表 create table qquser( number primary key, account number unique, nickname varchar(100), 基于 java 的仿 qq 聊天程序“mini q”的设计与实现 16 sign varchar(500), sex varchar(10), email varchar(100), head varchar(200); 2)创建分组表 create table qqperson_group( id number primary key, userid references qquser(id), name varchar(100); 3)创建群表 create table qqpublic_group( id number primary key, userid number references qquser(id), name varchar(100), sign varchar(800); 4)创建消息表 create table qqmessage( id number primary key, account_from number, account_to number, content varchar(1000); 5)创建用户与群的中间表 create qquser_publicgroup ( id number primary key, groupid number references qqpublic_group(id) , userid references qquser(id);); 6)创建用户与分组的中间表 create qquser_persongroup( id number primary key, groupid number references qqpublic_group(id) , userid references qquser(id); 7)为用户表插入数据 insert into qquser values(1,1,long,im long,male,,48.gif); insert into qquser values(2,2,a,aa,male,,48.gif); 基于 java 的仿 qq 聊天程序“mini q”的设计与实现 17 insert into qquser values(3,3,b,bb,male,,48.gif); insert into qquser values(4,4,c,cc,male,,48.gif); insert into qquser values(5,5,d,dd,male,,48.gif); 8)为分组表和群表插入数据 insert into qqperson_group values(1,1,my friend); into qqpublic_group values(1,1,ha ha,my new group); 9)为用户与群中间表插入数据 insert into qqperson_group(1,1,1); insert into qqperson_group(1,1,2); insert into qqperson_group(1,1,3); insert into qqperson_group(1,1,4); insert into qqperson_group(1,1,5); 10)为用户与分组中间表加入数据 insert into qqpublic_group(1,1,1); insert into qqpublic_group(1,1,2); insert into qqpublic_group(1,1,3); into qqpublic_group(1,1,4); insert into qqpublic_group(1,1,5); 基于 java 的仿 qq 聊天程序“mini q”的设计与实现 18 3.3 类图 socket:非自定义类,.socket。 thread: 非自定义类,java.util.thread。 client:负责具体发送和接收数据。 fromserverlisten:监听服务器是否在发送数据。 mainframe 系统的主界面(包括用户列表等)。 qquserinfo 包括用户的好友分组信息和群信息。 qquserclass 包括用户的个人信息,如 id、用户名等。 基于 java 的仿 qq 聊天程序“mini q”的设计与实现 19 第第四章四章 详细设计及实现详细设计及实现 4.1 界面设计 1)登陆界面 本界面需要填写的有两个,一个是用户账号,另一个是用户密码。在客户 端,用户输入其号码和密码,然后建立与服务器的连接,告诉服务器我要登录, 服务器收到后,开始通过 jdbc 方式读取数据库,然后与用户输入的信息比较, 否则返回错误,如果客户收到成功信息就打开主窗口,否则提示出错。如果成 功,便打开主程序窗口。然后客户向服务器请求读取好友名单,服务器收到该 请求,开始读取数据库中的 friend 表,得到好友的号码后,再在好友表中读取 好友资料,然后向客户端发送这些信息,客户收到后就在主窗口显示好友,并 且建立几个 vector 用以存储好友的信息。 2)注册界面 本界面要填写的项目包括:用户昵称,密码,邮件地址,个性签名。 需要选择的项目包括:性 别,头像。 本界面主要负责将用户的 信息包装成一个 qquserclass 对象。注册按钮一旦被点击, 就会试图创建一个与服务器端 的连接。连接创建成功就会将 填写的信息发送到服务器端。 如果服务器写入数据库成功, 就回返回一个账号。使用这个 账号,用户可以登陆到系统中。 基于 java 的仿 qq 聊天程序“mini q”的设计与实现 20 3)主界面(如右图) 主界面是系统的核心部分。它可以列出所有好友和客户 所有加入的群,也可以提供共享文件和文件下载功能。如果 用户服务双击好友分组或群,好友列表或群成员列表将会显 示出来。双击一个好友,可以与他进行私聊。双击一个群成 员,可以与群里的所有成员对话。本界面还提供了以下右键 菜单:添加好友分组、查找好友并加为好友、查找群并加为 群、创建群、移动好友到其它分组、查看好友资料、查看群 资料。 4)个人资料界面(如下图) 该界面主要显示某个用户信息,包括用户的账号,昵称, 性别,个性签名,用户等级等。 本界面还提供了一个“加为好友”按钮,如果点击它,此人将会被加为用 户的好友。默认的是加到第一个好友列表,不过也可以移动其它好友分组。 基于 java 的仿 qq 聊天程序“mini q”的设计与实现 21 5)文件传输服务器端界面 该界面使用的步骤为: 第一步:设置好服务器的 ip,端口。ip 一定要是本机的 ip,如果是单机测 试,ip 可以填写“” 。端口号尽量不要小于 2000,小于两千的端口可 能被系统占用。设置完 后点击“确定”按钮。 第二步:添加共享 文件。单击“添加文件 共享”按钮,将需要共 享的文件或文件夹添加 到共享列表中。 第三步:点击“启 动文件发送服务” 。 第四步:如果共享 文件完毕,需要点击 “退出” 。 6)文件传输客户端界面 使用文件传输的客户端要正确配置好服务器的 ip 和端口号,以及下载好的 文件的存放目录。如果其中之一配置不好,文件下载将会失败。设置好以后, 点击“连接”按钮,如果配置正确,这时将会看到服务器共享的文件。目前不 能支持文件夹下载和多文件下载,当看到一个文件以后,可以双击该文件夹并 查看文件夹里面的文件。 基于 java 的仿 qq 聊天程序“mini q”的设计与实现 22 7)私聊界面 本界面主要用来显示两个人的对话信息以及发送信息。发送的信息可以设 置字体,大小,字体颜色。也可以发送一个 qq 表情。 8)群聊界面 本界面主要用来显示多人的对话信息以及发送信息。发送的信息可以设置 字体,大小,字体颜色。也可以发送一个 qq 表情。右边显示的是群公告,可以 用来公布一些必要的信息。 基于 java 的仿 qq 聊天程序“mini q”的设计与实现 23 4.2 数据输入输出设计 4.2.1 数据输入 登陆界面数据的输入要求登陆界面数据的输入要求 number(账号)输入的必须是整型,它是一个用户登陆的账号。 password(密码)可以是你设置好的字符串,字符串内容可以随便。 如果用户设置不正确,将会导致登陆不成功,系统会弹出相应的对话框。 注册界面的输入注册界面的输入 nickname(昵称),password(密码),sign(个性签名)可以是任意的字符串。 email 必须是 email 地址格式,也就是中间必须含有“” ,否则提示输入 不正确。 共享界面的输入共享界面的输入 服务器 ip:填入本机的 ip 地址,格式如:53 端口号:随便一个可以未被占用的端口都行(最好是 2000 以上) 。 4.2.2 数据输出 用户注册的信息必须写入数据库中。 下载的文件存放到的指定的目录中,如果未指定就存放到默认路径中,当 默认路径不存在的时候给提示用户路径不存在。 4.3 代码实现 4.3.1 服务器端设计 连接池的设计连接池的设计 连接池,就是生产一定数量的数据库连接存储在一个容器中,等待程序来 索取,当这个容器器中的数据库连接全部被使用完的时候,就立即再产生指定 数量的数据库连接。这样做的优点就是可以充分利用资源,减少创建和关闭所 带来的资源消耗。在程序中它是以一个集合来存储这些连接的。如果访问的程 序过多,而连接又少,连接池可以迅速增加多个连接以供程序需求。如果连接 需求量超出连接池所设定的最高值。连接池将不理会程序的请求。 基于 java 的仿 qq 聊天程序“mini q”的设计与实现 24 连接池主要由以下几个类创建: (1)poolsperties 该文件的内容如下: poolname=qqpool user=root password=root url=jdbc:mysql:/:3306/javaqq driver=org.gjt.mm.mysql.driver minconn=5 reuse=20 maxconn=1000 logfile=c:/qqpool.log 第一行声明要创建的数据库连接池的名字。第二行是访问数据库的用户名。 第三行是访问数据库的密码。第四行是访问(mysql)数据库的 url。第五行是声 明驱动程序所在的类全名。第六行设定了数据库连接池中最少应保持的连接数。 第七行设定了一个连接(connection)最多可重复使用的次数。第八行设定了 连接池是最多创建的连接数。第九行声明了一个日志文件(该日志文件记录的 是数据库连接方面的信息)存放的路径。 (2)getpoolset.java,本程序的主要功能是获取上一配置文件中的信息, 并将获得的信息返回给其他程序。由于代码过多,本文并不列出源代码只以表 格的形式说明各方法的作用。 getpoolset 类的方法说明 方法名方法名作用作用 publicpublic voidvoid setfilename(string filename1) 设置将要访问的配置文件 publicpublic getpoolset() 创建一个空的获取配置文件中信息的对象 publicpublic getpoolset(string filename1) 根据 filename1 创建一个能猎取配置文件中信息的对象 publicpublic string getset(string name) 从配置文件取得信息,并返回给调用程序 (3)logfile.java 本类主要用于记录日志信息,当程序出现异常的时候就会调用此类的方法 将出错信息写如日志文件。 基于 java 的仿 qq 聊天程序“mini q”的设计与实现 25 (4)connectionpool.java 本程序主要用于创建数据库连接。 connectionpool 的方法说明 方法名方法名作用作用 publicpublic connectionpool(getpoolset poolset) 构造器,它创建一个 connectionpool 对象 publicpublic connection createconnection(getpoolset poolset) 真正创建 connectionpool 对象的方法 publicpublic connection getconnection() 获得连接 publicpublic voidvoid freeconnection(connection conn) 释放连接,返回给连接池 publicpublic voidvoid check() 检查连接是否还正常 publicpublic voidvoid release() 关闭连接 (5)poolmanager.java 连接池管理,和对外交互的类,决定连接池的生产 与销毁。 poolmanager 类的方法的说明 方法名方法名作用作用 synchronizedsynchronized publicpublic staticstatic poolmanager getinstance(string setfile) 返回某个连接池的管理对象 synchronizedsynchronized publicpublic staticstatic poolmanager getinstance() 返回默认的连接池管理对象 privateprivate poolmanager(getpoolset poolset1) 构造器,创建连接池管理对象 privateprivate connectionpool createpool(getpoolset poolset) 创建连接池 publicpublic connection getconnection() 获得连接 publicpublic voidvoid freeconnection(connection connection1) 释放连接 publicpublic voidvoid closemypool() 关闭连接池 publicpublic voidvoid release() 关闭所有的连接池 服务器端监听线程的设计服务器端监听线程的设计 服务器在监听到一个客户以后,它就会创建一个线程去管理这个客户。至 于如何去管理这个客户,服务器端不做任何干涉,完全由监听线程决定。监 基于 java 的仿 qq 聊天程序“mini q”的设计与实现 26 听线程主要对客户端的请求进行响应,做到有求必应。接收到信息后,首先判 断该信息是哪种类型,如果是要访问数据库服务器,则直接根据发送信息内容 操作数据库。如果是聊天内容,服务器会将该信息再次转发到目的地。这些判 断将会全放部在一个线程的 run 方法中。 4.3.2 传递包的设计 由于请求的服务不同,包的类型应该所区别。所以在设计的时候,应该在 包中加一个存储包类型的属性并提供设置和获取这个属性的方法。以下就是对 包抽象出来的应该有的方法,所有要传输的方法必须实现以下接口中的方法: packagepackage javaqq.datagram; importimport java.io.serializable; publicpublic interfaceinterface datagrampacket extendsextends serializable / define class number for the packet which need to send to others publicpublic staticstatic finalfinal intint messageshow_pic_personal = 1; publicpublic staticstatic finalfinal intint messageshow_photo = 2; publicpublic staticstatic finalfinal intint messageshow_word_personal = 3; publicpublic staticstatic finalfinal intint messageshow_word_group = 4; publicpublic staticstatic finalfinal intint messageshow_pic_group = 5; / define class number for the packet which not need to send to others publicpublic staticstatic finalfinal intint databasehandle_find = 11; publicpublic staticstatic finalfinal intint databasehandle_deal = 12; publicpublic staticstatic finalfinal intint databasehandle_result = 13; publicpublic staticstatic finalfinal intint databasehandle_flag = 14; publicpublic staticstatic finalfinal intint user_info = 21; publicpublic staticstatic finalfinal intint user_login = 22; publicpublic staticstatic finalfinal intint user_register = 23; publicpublic staticstatic finalfinal intint user_registerinfo = 24; /find infomation publicpublic staticstatic finalfinal intint find_user=31; publicpublic staticstatic finalfinal intint return_userinfo=32; publicpublic staticstatic finalfinal intint find_group=33; 基于 java 的仿 qq 聊天程序“mini q”的设计与实现 27 publicpublic staticstatic finalfinal intint return_groupinfo=34; publicpublic staticstatic finalfinal intint join_group=35; publicpublic staticstatic finalfinal intint return_groupmembers=36; / system information publicpublic staticstatic finalfinal intint system_info = 91; publicpublic staticstatic finalfinal intint system_on_or_offline = 92; publicpublic intint gettype(); publicpublic object getdata(); publicpublic longlong getfromuserid(); / if (gettouerid()=0),then the datapacket will be sended to server publicpublic longlong gettouserid(); publicpublic string gettalkroomid(); 服务器在接收包的时候,就调用它的 gettype()获得 type 的值,并采取相 应的措施。 4.3.3 聊天客户端设计 聊天窗口发送文件文字与图片的代码如下: /发送文字 public void insertstring(string s, simpleattributeset attributset) try doc.insertstring(doc.getlength(), s, attributset); doc.insertstring(doc.getlength(), “n“, null); showscroll.getverticalscrollbar().setvalue( showscroll.getverticalscrollbar().getmaximum()+20); 基于 java 的仿 qq 聊天程序“mini q”的设计与实现 28 showtext.setcaretposition(showtext.getdocument().getlength(); catch (badlocationexception e) e.printstacktrace(); /发送图片 public void inserticon(string str) string picurl = talkframe.class.getresource(“pic“).getpath() + file.separator; try imageicon icon = new imageicon(picurl + str); showtext.setcaretposition(doc.getlength(); showtext.inserticon(icon); doc.insertstring(doc.getlength(), “n“, null); showscroll.getverticalscrollbar().setvalue( showscroll.getverticalscrollbar().getmaximum(); catch (exception e) / todo auto-generated catch block e.printstacktrace(); 4.3.4 文件传输设计 文件传输客户端设计文件传输客户端设计 从 socket 中读取数据,并将数据写入到文件中,代码如下: while (!stop) 基于 java 的仿 qq 聊天程序“mini q”的设计与实现 29 int read = 0; if (getdis() != null) read = getdis().read(buf); / 将数据读入缓冲区,并返回读取数据长度 system.out.println(“read“ + read); else system.out.println(“数据输入流不存在!“); break; if (read = -1) fileout.close(); break; system.out.println(read); received += read; system.out.println(“写数据一次“); / 将缓冲区中的数据写入文件中 fileout.write(buf, 0, read); / while 文件传输服务端设计文件传输服务端设计 从文件中读取数据,并将数据发送到客户端,代码如下: while (!isstop() int read = 0; if (fis != null) read = fis.read(buf); / 从文件读取部分字节数据到 buf 缓冲区中 system.out.println(“read:“ + read); if (read = -1) 基于 java 的仿 qq 聊天程序“mini q”的设计与实现 30 / 若读到文件结尾,退出 break; dos.write(buf, 0, read); / 将 buf 缓冲区中的数据写入网络输出流 dos.flush(); 第第五章五章 系统测试系统测试 5.1 注册测试 输入以下信息: 注册填写图,得到:(登陆账号:46) 返回注册账号图 5.2 登陆测试 输入以下信息:(账号:1,密码:123) 基于 java 的仿 qq 聊天程序“mini q”的设计与实现 31 登陆填写图 登陆成功的结果: 登陆成功后

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论