版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 JISHOUUNIVERSITY专业课课程(kchng)论文题 目:基于Java的仿QQ聊天系统“MINI Q”的设计与实现作 者:学 号:所属学院:信息科学与工程学院专业年级:总 评 分:完成时间:吉首大学(dxu)信息科学与工程学院基于Java的仿QQ聊天(lio tin)系统“MINI Q”的设计(shj)与实现摘 要随计算机网络的迅速发展,对人类社会诸多领域产生了巨大的影响。尤其是,随着信息时代的来临,人与人之间愈来愈趋向于通过网络来交流和传递信息。而聊天系统(xtng)正是当前人们使用最多的中介。在这个平台上,许多认识或不认识的人们彼此间能够随意的相互交流。因此,开发和架构这种平台
2、符合时代发展的需要。本系统在开发中用到了局域网通信机制的原理,通过直接继承Thread类来建立多线程。开发中利用了计算机网络编程的基本理论知识CP/IP协议、客户端/服务器端模式(Client/Server模式)、网络编程的设计方法等。在网络编程中对信息的读取、发送,是利用流来实现信息的交换,其中介绍了对实现一个系统的信息流的分析,包含了一些基本的软件工程的方法。关键词:Socket;客户端;服务器端;Thread;链接(connection)目 录 TOC o 1-3 h z u HYPERLINK l _Toc338802413 第一章引言(ynyn) 第一章引言(ynyn)1.1课题(k
3、t)背景、意义(yy)及现状交流对于人类社会及其每个成员都至关重要。直接交流的方式包括语言、文字等,而远程交流还需借助于一些先进的工具如电话、网络等。本课题研究的是支持内部网络交流的系统。当今主流的即时聊天工具有QQ,MSN Messenger,Yahoo Messenger等,国内最热门的当属QQ, QQ是深圳市腾讯计算机系统有限公司开发的一款基于Internet的即时通信(IM)软件。腾讯QQ支持在线聊天、视频电话、点对点断点续传文件、共享文件、网络硬盘、自定义面板、QQ邮箱等多种功能,并可与移动通讯终端等多种通讯方式相连。1999年2月,腾讯正式推出。第一个即时通信软件“腾讯QQ”,QQ
4、在线用户由1999年的2人(2人指马化腾和张志东)到现在已经发展到上亿用户了,在线人数超过一亿,是目前使用最广泛的聊天软件之一。QQ不仅仅是简单的即时通信软件,它与全国多家寻呼台、移动通信公司合作,实现传统的无线寻呼网、GSM移动电话的短消息互联,是国内最为流行功能最强的即时通信(IM)软件,使QQ不仅仅是单纯意义的网络虚拟呼机,而是一种方便、实用、超高效的即时通信工具。QQ可能是现在在中国被使用次数最多的通讯工具。 它可以在2000/XP/2003/Win7/Win8操作系统下运行,是十分灵活的网络寻呼工具。它会自动检查您是否已联网,如果您的电脑已连入Internet,可以搜索网友、显示在线
5、网友,可以根据QQ号、昵称、姓名、email地址等关键词来查找,找到后可加入到通讯录中。当您的通讯录中的网友在线时,QQ中朋友的头像就会显示在线,根据提示就可以发送信息,如果对方登记了寻呼机或开通了GSM手机短消息,即使离线了,您也可及时将信息传递给您的好友。虽然以上这些软件是免费的,并且功能越来越强大。但是它们的唯一的不足就是必须要联网或者下载到它们的服务端,要不然是没法脱离Intenet使用的。为了能在一个没有连接到Intenet的局域网使用聊天工具,那就必须要有服务器端。本系统就是包括服务器端与客户端,可以在局域网聊天的一个工具。1.2 涉及(shj)的相关技术及协议1.2.1 JAVA
6、语言(yyn)经过认真的讨论分析,综合各种计算机高级语言(yyn)的特征和适应范围,最终决定选择纯面向对象的Java语言来完成课题的设计,下面就技术可行性方面,对 Java语言作一简要介绍。Sun公司的口号就是“网络就是计算机”,Java能使所有东西从桌面计算平稳的转 变为基于网络的计算,它是专门为此而建立的,并显然是为了完成这个任务而来的。使用 Java 语言,可以相对轻松的一天编写一个有条理的网络程序。今天,Java的网络 功能正在飞跃发展,不断有新的特性增加到这个有价值的基础上,JavaSoft 实验室正 在不断努力使Java更加完善。就Java语言的主要特点,本人归纳如下:Java程序
7、设计的开发过程与运行环境 Java是解释型的高级编程语言,所以 Java 程序的开发通常需要经过编写源程序、 编译生成字节码和运行三个过程。 这里要提到,Java应用程序的开发周期包括编译、下载、解释和执行几个部分。Java编译程序将Java源程序翻译为JVM 可执行代码字节码。这一编译过程同C/C+的编译有些不同。当C编译器编译生成一个对象的代码时,该代码是为在某一特定硬件平台运行而产生的。因此,在编译过程中,编译程序通过查表将所有对符号的引用转换为特定的内存偏移量,以保证程序运行。Java编译器却不将对变量和方法的引用编译为数值引用,也不确定程序执行过程中的内存布局,而是将这些符号引用信息
8、保留在字节码中,由解释 器在运行过程中创立内存布局,然后再通过查表来确定一个方法所在的地址。这样就有效的保证了Java的可移植性和安全性。1.2.2 C/S模式介绍20世纪90年代出现并迅速占据主导地位的一种计算模式为客户机/服务器模式,简称为C/S 模式,它实际上就是把主机终端模式中原来全部集中在主机部分的任务一分为二,保留在主机上的部分负责集中处理和汇总运算,成为服务器;而下放到终端的部分负责为用户提供友好的交互界面,称为客户机。 相对于以前的模式,C/S模式最大的改进是不再把所有软件都装进一台计算机,而是把应用系统分成两个不同的角色和两个不同的地位:一般在运算能力较强的计算机上安装服务器
9、端程序,而在一般的PC上安装客户机程序。正是由于个人 PC 机的出现使客户机/服务器模式成为可能,因为 PC 机具有一定的运算能力,用它代替了上面第一种模式的哑终端后,就可以把主机端的一部分工作放在客户机端完成,从而减轻了主机的负担,也增加了系统对用户的响应速度和响应能力。客户机和服务器之间通过相应的网络协议来进行通讯。客户机向服务器发出数据 请求,服务器将数据传送给客户机进行计算,计算完毕,计算结果可返回给服务器。这种模式的优点充分利用了客户机的性能,使计算能力大大提高;另外,由于客户机和服务器之间的通讯是通过网络协议进行的,是一种逻辑的联系,因此物理上在客户机和服务器两端是易于扩充的。C/
10、S模式是目前占主流的网络计算模式。该模式在操作过程中采取的是主动请示方式: 首先(shuxin)服务器方要先启动(qdng),并根据请示提供相应服务(过程如下) : (1)打开一个通信通道同时通知(tngzh)本地主机,服务器愿意在某一个公认地址上接收客户请求。 (2)等待某个客户请求到达该端口。 (3)接收到重复服务请求,处理该请求并发送应答信号。 (4)返回第二步,等待另一客户请求。 (5)关闭该服务器。 客户端: (1)打开一个通信通道,并连接到服务器所在主机的特定端口。 (2)向服务器发送服务请求报文,等待并接收应答;继续提出请求。(3)请求结束后关闭通信通道并终止。 分布运算和分布管
11、理是客户机/服务器模式的特点。最后选择了 C/S 模式。基于Java的仿QQ聊天程序“MINI Q”的设计与实现第二章系统分析2.1 可行性分析(fnx)(1)经济可行性:本系统需要一个oracle数据库服务器,由于使用人数比较少,安装一个免费的oracle数据库完全可以应付需要,所以成本(chngbn)就不用考虑了。(2)操作可行性:只要一台以上计算机连接在同一个局域网内,本系统就可以安装使用,所以(suy)操作上完全不存在问题。(3)技术可行性:本系统采用Java语言,是基于CS架构的。开发这个系统需要开发者对socket编程和java Swing这两方面的技术比较熟。由于本人长期从事于j
12、ava语言编程,所以技术方面是可行的。2.2 需求分析2.2.1 功能分析本系统要实现的功能如下:1)注册服务器收到用户的注册请求,便开始(kish)接受客户传递的信息,诸如客户的呢称,性别,籍贯,个人资料等,接受完毕后,便通过Jdbc-Odbc与后台数据库连接,然后向数据库添加记录,如果成功,便向客户返回其号码。客户收到服务器返回的信息后,便打开主登陆窗口。2)登陆(dng l)在客户端,用户输入其号码和密码,然后建立(jinl)与服务器的连接,告诉服务器我要登录,服务器收到后,开始通过JdbcOdbc读取数据库,然后与用户输入的信息比较,如果成功,便打开主程序窗口。然后客户向服务器请求读取
13、好友名单,服务器收到该请求,开始读取数据库中的表,得到好友的号码后,再在icq表中读取好友资料,然后向客户端发送这些信息,客户收到后就在主窗口显示好友,并且建立几个矢量(Vector)用以存储好友的呢称,号码。3)私聊私聊就是两个聊天。客户端首先发送消息到服务器端,服务器端根据发送人信息和接收者信息来转发。例如服务器接收到一个A发给B的消息先判断B是否已经在线,如果在线就将信息发送过去。B接收到A发来的信息,如果是未建立对话窗口,就询问是否建立对话,否则就丢弃信息。4)群聊群聊,就是多人一起聊天。过程与私聊差不多。唯一的不同就是服务器会将信息转发给指定群的所有成员。5)创建分组用户注册以后默认
14、的好友分组只有一个。用户在执行添加分组操作以后,客户端分将一个这个动作的信息发送给服务器端(主要是FromClientlisten)。服务器端的fromClientListen接收到这个请求,会进行数据库操作,将要添加的分组信息插入到数据库中。如果成功,则返回这个分组的信息给客户端,否则返回错误提示信息。6)创建群用户注册以后群个数为0。用户在执行添加群操作以后,客户端分将一个这个动作的信息发送给服务器端(主要是FromClientlisten)。服务器端的fromClientListen接收到这个请求,会进行数据库操作,将要添加的群信息插入到数据库中。如果成功,则返回这个群的信息给客户端,否
15、则返回错误提示信息。7)查找好友并加为好友输入要查找的用户ID号,客户端发送一个查询信息给服务器端,如果找到就返回用户服务信息。打开一个用户信息显示界面,该界面会提供一个“添加为好友”按钮,点击后可将此人加为好友。如果未找到,弹出一个信息提示框。8)查找(ch zho)群并加入群输入要查找(ch zho)的群ID号,客户端发送一个查询信息给服务器端,如果找到就返回用户服务信息。打开一个群信息显示界面,该界面会提供一个“加入(jir)此群”按钮,点击后可将此人加为好友。如果未找到,则弹出一个信息提示框。9)文件共享在启动文件传输服务器的共享文件功能之前,要设置它的IP号和端口,如果设置不好。好友
16、将无法下看到这些共享的文件。还有一个重要的步骤就是添加共享文件或目录。最后启动文件共享。10)下载文件使用文件传输的客户端要正确配置好服务器的IP和端口号,以及下载好的文件的存放目录。如果其中之一配置不好,文件下载将会失败。设置好以后,点击“连接”按钮,如果配置正确,这时将会看到服务器共享的文件。目前不能支持文件夹下载,当看到一个文件夹以后,可以双击该文件夹并查看文件夹里面的文件。2.2.2 性能分析本系统由于采用免费的oracle数据库软件,连接数最多不能超过200,所以并发访问数据库的人数不能超过200人。2.2.3 用例图2.2.4 时序(sh x)图客户登陆、注册(zhc)时的服务器端
17、时序图本图(bn t)说明:服务器接每次与一个客户连接以后,就会去创建一个监听线程。通过线程来接收客户端发送的所有数据。如果要查询数据库,监听线程会请求获得一个数据库连接.如果数据库连接已经获得,就把连接交给DBOperation对象,通过此对象可以返回给监听线程必要的结果。最后监听线程会通过Socket将结果返回给客户端。2.2.5 活动图1)用户登陆活动图(见右图)本图(bn t)说明:首先填写登陆信息,提交以后服务器会对用户名和密码进行验证。如果不正确,返回一个提示信息。如果登陆成功,就更新在线状态。通知所有好友自己已经上线。2)客户(k h)之间的通信活动图本图说明:短消息发送以后,服
18、务器端对应的监听线程会接收到一个数据包。此包中包含接收者的信息,如果(rgu)接收者在线,数据包将会转发到接收者。如果不在线,就写入数据库。3)客户之间的文件传送活动图 本图说明:客户端向服务器发送文件下载请求。如果服务器端同意下载,就读取文件流并将数据流写入到客户端。客户端读取到文件名之后,立刻创建一个新的文件并将读取的数据写入到文件中。4)新增好友活动(hu dng)图根据好友ID号查找好友,如果此ID存在,就将用户(yngh)信息发送到客户端。同时将好友关系写入到数据库。5)删除(shnch)好友活动图此图说明:客户向服务器发送删除好友请求(qngqi)。服务器接收到删除好友请求以后,将
19、好友关系从数据库中删除。第三章总体设计3.1 功能模块图本系统主要由由两个(lin )子系统组成:1)文件传输系统(xtng);2)聊天子系统。文件传输系统(xtng)的功能主要有:1)共享文件;2)查看并下载文件。聊天子系统的功能有:1)注册;2)登陆;3)添加群;4)查找群;5)私聊;6)群聊;7)查看好友资料;8)查找好友;9)添加好友;10)创建好友分组。3.2 数据库设计(shj)3.2.1 E-R图用户(yngh)表(QQUser):属性(shxng):id,account(登陆账号),pwd,nickname,sign(个性签名),sex,email,head(头像)关系: 一个
20、用户可以有多个好友分组。 一个用户可以有多个群。 一个用户可以有多条留言。好友分组表(Qqperson_group):属性(shxng):id,userid(创建者ID),name(分组名) 关系:一条(y tio)记录只对应一个用户,但是可以拥有多个组成员。群表(Qqpublic_group):属性(shxng):id,userid(创建者ID号),name(群名),sign(群公告)关系:一个群只有一个创建者,但是可以拥有多个群成员。3.2.2 表结构设计客户信息表(qquser)1自动id号Id整数2用户账号Account整数3用户密码Pwd字符4用户昵称Nickname字符5用户签名s
21、ign字符6用户性别Sex字符7用户邮箱email字符8用户头像Head字符Qq消息(xio xi)表(QQMessage)1自动IDID整数2发信人Account_from整数3收信人Account_to整数4发送内容Content字符用户(yngh)分组表(qqpersongroup)1自动IDID整数2拥有者Iduserid整数3分组名称name字符公共(gnggng)群表(qqpublic_group)1自动IDID整数2创建人userid整数3群名称name整数4群的公共消息sign字符用户与群的中间表(qquser_publicgroup)1自动IDID整数2加入的群IDgroup
22、id整数3加入的用户的IDuserid整数用户与分组的中间表(QQuser_persongroup)1自动IDID整数2加入的分组的idgroupid整数3加入分组的用户的iduserid整数以上各表创建的代码如下:1)创建用户表create table qquser(number primary key,account number unique,nickname varchar(100),sign varchar(500),sex varchar(10),email varchar(100),head varchar(200);2)创建(chungjin)分组表create table q
23、qperson_Group(id number primary key,userid references qquser(id),name varchar(100);3)创建(chungjin)群表create table qqpublic_group(id number primary key,userid number references qquser(id),name varchar(100),sign varchar(800);4)创建(chungjin)消息表create table qqmessage(id number primary key,account_from numb
24、er,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 refer
25、ences 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);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)为分组表和群表插入(ch r)数据insert
26、 into qqperson_group values(1,1,my friend);into qqpublic_group values(1,1,ha ha,my new group);9)为用户与群中间表插入(ch r)数据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)为用户与分组中间(zhng
27、jin)表加入数据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);3.3类图Socket:非自定义类,.Socket。Thread: 非自定义类,java.util.Thread。Client:负责具体(jt)发送和接收数据。FromServerListen:监听(jin tn)服务器是否在发送数据。MainFrame
28、系统的主界面(jimin)(包括用户列表等)。QQUserInfo包括用户的好友分组信息和群信息。QQUserClass包括用户的个人信息,如ID、用户名等。第四章 详细(xingx)设计及实现(shxin)4.1 界面设计1)登陆(dng l)界面本界面需要填写的有两个,一个是用户账号,另一个是用户密码。在客户端,用户输入其号码和密码,然后建立与服务器的连接,告诉服务器我要登录,服务器收到后,开始通过Jdbc方式读取数据库,然后与用户输入的信息比较,否则返回错误,如果客户收到成功信息就打开主窗口,否则提示出错。如果成功,便打开主程序窗口。然后客户向服务器请求读取好友名单,服务器收到该请求,开
29、始读取数据库中的friend表,得到好友的号码后,再在好友表中读取好友资料,然后向客户端发送这些信息,客户收到后就在主窗口显示好友,并且建立几个Vector用以存储好友的信息。2)注册界面本界面要填写的项目包括:用户昵称,密码,邮件地址,个性签名。需要选择的项目包括:性别,头像。本界面主要负责将用户的信息包装成一个QQUserClass对象。注册按钮一旦被点击,就会试图创建一个与服务器端的连接。连接创建成功就会将填写的信息发送到服务器端。如果服务器写入数据库成功,就回返回一个账号。使用这个账号,用户可以登陆到系统中。3)主界面(jimin)(如右图)主界面是系统的核心部分。它可以列出所有好友和
30、客户所有加入的群,也可以提供共享文件和文件下载功能。如果用户服务双击好友分组或群,好友列表或群成员列表将会显示出来。双击一个好友,可以与他进行(jnxng)私聊。双击一个群成员,可以与群里的所有成员对话。本界面还提供了以下右键菜单:添加好友分组、查找好友并加为好友、查找群并加为群、创建群、移动好友到其它分组、查看好友资料、查看群资料。4)个人资料界面(jimin)(如下图)该界面主要显示某个用户信息,包括用户的账号,昵称,性别,个性签名,用户等级等。本界面还提供了一个“加为好友”按钮,如果点击它,此人将会被加为用户的好友。默认的是加到第一个好友列表,不过也可以移动其它好友分组。5)文件传输服务
31、器端界面(jimin)该界面(jimin)使用的步骤为:第一步:设置好服务器的IP,端口。IP一定要是本机的IP,如果是单机测试,IP可以(ky)填写“”。端口号尽量不要小于2000,小于两千的端口可能被系统占用。设置完后点击“确定”按钮。第二步:添加共享文件。单击“添加文件共享”按钮,将需要共享的文件或文件夹添加到共享列表中。第三步:点击“启动文件发送服务”。第四步:如果共享文件完毕,需要点击“退出”。6)文件传输客户端界面使用文件传输的客户端要正确配置好服务器的IP和端口号,以及下载好的文件的存放目录。如果其中之一配置不好,文件下载将会失败。设置好以后,点击“连接”按钮,如果配置正确,这时
32、将会看到服务器共享的文件。目前不能支持文件夹下载和多文件下载,当看到一个文件以后,可以双击该文件夹并查看文件夹里面的文件。7)私聊界面(jimin)本界面主要用来显示两个人的对话信息以及发送(f sn)信息。发送的信息可以设置字体,大小,字体颜色。也可以发送一个QQ表情。8)群聊界面(jimin)本界面主要用来显示多人的对话信息以及发送信息。发送的信息可以设置字体,大小,字体颜色。也可以发送一个QQ表情。右边显示的是群公告,可以用来公布一些必要的信息。4.2 数据(shj)输入输出设计4.2.1 数据(shj)输入登陆(dng l)界面数据的输入要求Number(账号)输入的必须是整型,它是一
33、个用户登陆的账号。Password(密码)可以是你设置好的字符串,字符串内容可以随便。如果用户设置不正确,将会导致登陆不成功,系统会弹出相应的对话框。注册界面的输入Nickname(昵称),password(密码),sign(个性签名)可以是任意的字符串。Email必须是Email地址格式,也就是中间必须含有“”,否则提示输入不正确。共享界面的输入服务器IP:填入本机的IP地址,格式如:53端口号:随便一个可以未被占用的端口都行(最好是2000以上)。4.2.2 数据输出用户注册的信息必须写入数据库中。下载的文件存放到的指定的目录中,如果未指定就存放到默认路径中,当默认路径不存在的时候给提示用
34、户路径不存在。4.3 代码实现4.3.1 服务器端设计连接池的设计连接池,就是生产一定数量的数据库连接存储在一个容器中,等待程序来索取,当这个容器器中的数据库连接全部被使用完的时候,就立即再产生指定数量的数据库连接。这样做的优点就是可以充分利用资源,减少创建和关闭所带来的资源消耗。在程序中它是以一个集合来存储这些连接的。如果访问的程序过多,而连接又少,连接池可以迅速增加多个连接以供程序需求。如果连接需求量超出连接池所设定的最高值。连接池将不理会程序的请求。连接池主要(zhyo)由以下几个类创建:(1)poolSperties 该文件(wnjin)的内容如下:poolname=QQPooluse
35、r=rootpassword=rooturl=jdbc:mysql:/:3306/javaqqdriver=org.gjt.mm.mysql.Driverminconn=5reuse=20maxconn=1000logfile=c:/QQPool.log第一行声明要创建的数据库连接池的名字。第二行是访问数据库的用户名。第三行是访问数据库的密码。第四行是访问(mysql)数据库的url。第五行是声明驱动程序所在的类全名。第六行设定了数据库连接池中最少应保持的连接数。第七行设定了一个连接(Connection)最多可重复使用的次数。第八行设定了连接池是最多创建的连接数。第九行声明了一个日志文件(该
36、日志文件记录的是数据库连接方面的信息)存放(cnfng)的路径。(2)GetPoolSet.java,本程序的主要功能是获取上一配置文件中的信息,并将获得的信息返回给其他程序。由于代码过多,本文并不列出源代码只以表格的形式说明各方法的作用。GetPoolSet类的方法说明方法名作用public void setFileName(String fileName1)设置将要访问的配置文件public GetPoolSet()创建一个空的获取配置文件中信息的对象public GetPoolSet(String fileName1)根据fileName1创建一个能猎取配置文件中信息的对象public
37、String getSet(String name)从配置文件取得信息,并返回给调用程序(3)LogFile.java 本类主要用于记录日志信息,当程序出现异常的时候就会调用此类的方法将出错信息写如日志文件。(4)ConnectionPool.java 本程序(chngx)主要用于创建数据库连接。ConnectionPool的方法(fngf)说明方法名作用public ConnectionPool(GetPoolSet poolset)构造器,它创建一个ConnectionPool对象public Connection createConnection(GetPoolSet poolset)真
38、正创建ConnectionPool对象的方法public Connection getConnection()获得连接public void freeConnection(Connection conn)释放连接,返回给连接池public void check()检查连接是否还正常public void release()关闭连接(5)PoolManager.java连接池管理,和对外交互的类,决定连接池的生产(shngchn)与销毁。PoolManager类的方法的说明方法名作用synchronized public static PoolManager getInstance(String
39、 setfile)返回某个连接池的管理对象synchronized public static PoolManager getInstance()返回默认的连接池管理对象private PoolManager(GetPoolSet poolset1)构造器,创建连接池管理对象private ConnectionPool createPool(GetPoolSet poolset)创建连接池public Connection getConnection()获得连接public void freeConnection(Connection connection1)释放连接public void c
40、losemypool()关闭连接池public void release()关闭所有的连接池服务器端监听线程的设计服务器在监听到一个客户以后,它就会创建一个线程去管理这个客户。至于如何去管理这个客户,服务器端不做任何干涉,完全由监听线程决定。监听线程主要对客户端的请求进行响应,做到有求必应。接收到信息后,首先判断该信息是哪种类型,如果是要访问数据库服务器,则直接根据发送信息内容操作数据库。如果是聊天内容,服务器会将该信息再次转发到目的地。这些判断将会全放部在一个线程的run方法中。4.3.2 传递(chund)包的设计由于请求的服务不同,包的类型应该所区别。所以在设计(shj)的时候,应该在包
41、中加一个存储包类型的属性并提供设置和获取这个属性的方法。以下就是对包抽象出来的应该有的方法,所有要传输的方法必须实现以下接口中的方法:package javaqq.datagram;import java.io.Serializable;public interface DatagramPacket extends Serializable / define class number for the packet which need to send to otherspublic static final int MESSAGESHOW_PIC_PERSONAL = 1;public sta
42、tic final int MESSAGESHOW_PHOTO = 2;public static final int MESSAGESHOW_WORD_PERSONAL = 3;public static final int MESSAGESHOW_WORD_GROUP = 4;public static final int MESSAGESHOW_PIC_GROUP = 5;/ define class number for the packet which not need to send to otherspublic static final int DATABASEHANDLE_F
43、IND = 11;public static final int DATABASEHANDLE_DEAL = 12;public static final int DATABASEHANDLE_RESULT = 13;public static final int DATABASEHANDLE_FLAG = 14;public static final int USER_INFO = 21;public static final int USER_LOGIN = 22;public static final int USER_REGISTER = 23;public static final
44、int USER_REGISTERINFO = 24;/find infomationpublic static final int FIND_USER=31;public static final int RETURN_USERINFO=32;public static final int FIND_GROUP=33;public static final int RETURN_GROUPINFO=34;public static final int JOIN_GROUP=35;public static final int RETURN_GROUPMEMBERS=36;/ system i
45、nformationpublic static final int SYSTEM_INFO = 91;public static final int SYSTEM_ON_OR_OFFLINE = 92;public int getType();public Object getData();public long getFromuserid();/ if (getTouerid()=0),then the datapacket will be sended to serverpublic long getTouserid();public String getTalkroomid();服务器在
46、接收包的时候(sh hou),就调用它的getType()获得type的值,并采取相应的措施。4.3.3 聊天(lio tin)客户端设计聊天窗口发送文件(wnjin)文字与图片的代码如下:/发送文字public void insertString(String s, SimpleAttributeSet attributset) Try doc.insertString(doc.getLength(), s, attributset);doc.insertString(doc.getLength(), n, null);showScroll.getVerticalScrollBar().se
47、tValue(showScroll.getVerticalScrollBar().getMaximum()+20);showText.setCaretPosition(showText.getDocument().getLength(); catch (BadLocationException e)e.printStackTrace();/发送(f sn)图片public void insertIcon(String str) String picurl = TalkFrame.class.getResource(pic).getPath()+ File.separator;try Image
48、Icon 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 blocke.prin
49、tStackTrace();4.3.4 文件传输设计(shj)文件传输客户端设计(shj)从Socket中读取数据,并将数据写入到文件中,代码如下: while (!stop) int read = 0;if (getDis() != null) read = getDis().read(buf); / 将数据(shj)读入缓冲区,并返回读取数据长度 System.out.println(read + read); ElseSystem.out.println(数据输入(shr)流不存在!);break;if (read = -1) fileOut.close();break;System.o
50、ut.println(read);received += read;System.out.println(写数据(shj)一次);/ 将缓冲区中的数据写入文件中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) / 若读到文件(wnji
51、n)结尾,退出break;dos.write(buf, 0, read); / 将buf缓冲区中的数据(shj)写入网络输出流dos.flush();第五章(w zhn) 系统测试5.1 注册测试输入以下信息:注册填写图,得到:(登陆账号:46)返回注册账号图5.2 登陆(dng l)测试(csh)输入以下信息:(账号(zhn ho):1,密码:123)登陆填写图登陆成功的结果:登陆成功后的主界面图5.3 私聊测试1)首先登陆两个账号,如(账号1密码123,账号2密码123)2)打开聊天窗口,如打开(d ki)两个聊天窗口3)相互(xingh)发送信息两人相互(xingh)发送信息图5.4 群聊测试1)首先登陆三个账号,如(账号1密码123,账号2密码123,账号3密码123)2)打开三个对话窗口3)各发一条信息(如:我是某某)结果为:群聊测试(csh)图5.5 文件传输测试(csh)1)登陆账号1密码(m m)123,启动文件传输服务器端(),设置本机IP地址,添加共享文件文件发送端测试图2)登陆账号2密码(m m)123,设置服务器端口与IP,并点击连接按钮文件(wnjin)发送客户端测试1 选中一个文件(wnjin)并添加到下载列表,点击下载按钮。文件发送客户端测试2 成功(chnggng)下载的文件:下载(xi zi)后的文件基于Java的仿QQ聊天程序“MINI Q”
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026五年级数学下册 分数加减法解决问题
- 2024二建《机电工程管理与实务》模考(一)
- 舞台音响行业前景
- 智能机器人广告语
- 2024年产科实习自我鉴定
- 1+X集成电路理论模拟练习题+答案
- 2024北京高二(上)期末地理汇编:水的运动章节综合
- 2026低空经济产业园区规划设计方案
- 医师三基妇产科基本理论(生理学)模拟试卷1(共356题)
- 2023年化学高考模拟题专题20化工流程
- 2026山东济南新旧动能转换起步区招聘40人备考题库及答案详解(真题汇编)
- 2026年北京市东城区高三一模地理试卷(含答案)
- 2026年天津市和平区中考一模语文试卷和答案
- 2026年及未来5年市场数据中国外运船舶代理行业市场发展数据监测及投资潜力预测报告
- GB/T 9959.4-2019鲜、冻猪肉及猪副产品第4部分:猪副产品
- GB/T 7702.13-1997煤质颗粒活性炭试验方法四氯化碳吸附率的测定
- 大姜优质高产栽培管理技术课件
- 医院内控制度课件
- (完整版)圣三国蜀汉传攻略
- 天津中考数学试题考点解题方法总结
- (完整版)信誉楼员工手册
评论
0/150
提交评论