




免费预览已结束,剩余44页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
学 号2009222413分类号TP311本科生毕业论文(设计)题目: 基于java的即时通信软件设计与实现 院 (系) 电子与信息工程系 专 业 电子信息工程 班 级 2009级2班 学 生 姓 名 李 毅 指导教师(职称) 王克刚(副教授) 提 交 时 间 二一三年五月 版权声明任何收存和保管本论文各种版本的单位和个人,未经本论文作者同意,不得将本论文转借他人,亦不得随意复制、抄录、拍照或以任何方式传播。否则,引起有碍作者著作权之问题,将可能承担法律责任。原创性声明本人郑重声明:所呈交的学位论文,是本人在导师的指导下,独立进行研究工作所取得的成果。除文中已经注明引用的内容外,本论文不含任何其他个人或集体已经发表或撰写过的作品或成果。对本文的研究做出重要贡献的个人和集体,均已在文中以明确方式标明,本声明的法律结果由本人承担。论文作者签名: 日期: 年 月 日安康学院本科生毕业论文(设计) 基于java的即时通信软件设计与实现李 毅(安康学院电子与信息工程系,陕西安康,725000) 摘 要 计算机网络技术高速发展的今天,即时通讯越来越方便,使得通信软件也变得越来越重要,所以本文做了一个即时通信软件,该软件主要是基于Java平台,采用C/S结构客户端和服务器端通过Socket发送和接收消息,并遵循java的面向对象的设计原则。该软件使用MyEclipse开发工具,服务器端的设计和实施过程中,使用多线程技术,它可以在一个程序中同时运行多个不同的线程,执行不同的任务,大大提高服务器资源的利用率。数据库管理系统用Oracle完成,并通过JDBC桥访问数据库。聊天系统将完成好友登陆、验证登陆、多人互相聊天、新用户注册、添加好友、删除好友、修改个人资料等功能。关键词 即时聊天;系统;Java;C/S Instant communication software Design and Plementation Based on JavaLI YI(Department of Electronic and Information Engineering, Ankang University, Ankang, 725000)Abstract With the rapid development of computer network technology nowadays, instant communication becomes more and more convenient. So software for communication is more and more important at the same time. This paper is about a instant communication software. The software is mainly based on Java platform. using C/S structure, and its client and server receive messages through the Socket to send, objecting the principles of Java. Whats more, My Eclipse is used in the software as the development tools, and in the process of design and implementation, the server uses the multi-threading technology, which can be a number of different threads running simultaneously in a program, making it perform different tasks, and greatly improving the server resource utilization. Database management systems, completes with Oracle, and make an access to the database through the JDBC bridges. Chat system has the function of friends logining. Verifying logining, multi-chat with each other, and the new user registration, add friends, delete friends, modify personal information and other functions.Key Words Instant Messager; System; JAVA; C/S目 录第一章 绪 论11.1 引言11.2 课题研究背景11.3 系统实现的关键技术21.4 本文工作及内容安排3第二章 系统的需求分析52.1 项目设计的需求描述52.2 服务器端需求52.3客户端需求52.4 对于发送的消息的一些协议需求5第三章 系统设计73.1 软件设计流程73.2 即时聊天系统的实施原理73.2.1 工作方式和技术原理73.2.2 通讯方式83.3 功能模块划分93.3.1 服务器端93.3.2 客户端9第四章 数据库概要设计114.1 系统实体及实体关系图114.2 用户表124.3 好友表(friends)124.4 在线状态表(logtype)134.5 登陆表134.6 离线信息表13第五章 详细设计155.1 服务器端的设计与实现155.2 用户注册模块165.3 登陆模块175.3.1登录模型图175.3.2登录验证175.4 添加好友、删除好友、修改个人资料模块205.5 发送和接收消息模块215.5.1 聊天流程215.5.2发送和接收消息225.6 关闭客户端23第六章 系统测试256.1 系统测试案例256.2 测试结果和分析25第七章 总结与展望29参考文献30致 谢31附 件32第一章 绪论第一章 绪 论1.1 引言随着科学技术的发展,人类目前已经处于信息时代。人和人之间的信息交流具有了多种途径。不仅可以面对面的直接交流,还可以借助于一些先进的工具如电话、网络等实现远程交流。人们最为熟悉的QQ就是实现远程交流的应用典范。针对企业的专业化即时通讯也迅速成长,具备安全性和多用途的互动办公通讯软件平台随之诞生,它们大都集成文字、声音、视频、屏幕、即时邮件、文件共享与下载的诸多功能,能满足用户的各种需要。并且即时通讯技术有将无线通讯融入计算机网络的趋势,其前景是非常光明的。本课题研究的是支持内部网络交流的系统网络即时通讯系统。1.2 课题研究背景即时通讯系统是一种非常便捷的网络通讯技术,利用互联网建立起网络虚拟环境,通过计算机键盘或无线设备在网络上进行实时信息交流,成为一种提供公共通讯、商务通讯及商务合作的新媒介,同时也弥补了传统通讯形式的不足,尤其是电子邮件及语音通信方面的不足。即时通讯工具在实现传输视频与音频信息,使协作成员可以远距离进行直观、真实的文字交流的同时,利用多媒体的技术,它还可以帮助使用者对工作中各种信息进行处理。随着即时通信普及,全球即时通信用户的数量也不断增长。目前即时聊天系统种类众多,功能也较为齐全,但MSN、QQ等公共消息系统,由于聊天对象及内容的不可控,若在企业内部使用,可能会降低工作效率。本文所研究的即时通讯系统的应用目标定位于企业内部网络,将自己的服务器端安装在企业内,并且人员的创建是由系统管理员来完成,因此很好的解决企业或单位的信息沟通及协同问题,提高工作效率。在该系统中,企业内部员工可以利用该通讯系统随时随地发送文字消息,系统包括客户端程序和服务器端程序,支持局域网和Internet。企业内部员工之间可以在内部网覆盖的任何地点、任何时间进行即时交流,帮助实现企业内部协同工作。即时通讯带给了更大的互动性,人们在交流彼此的看法、意见时,发现采用你来我往的方式达到的效果最为明显。这就体现了互动性。通过使用及时通讯系统,大家不需要借助其它额外的工具,就可以在线实时地交流工作,即时通信软件是网络软件的一个重要应用,构造的成本低、实时性好、网上交流平台便捷的特点决定了它的普及性,使其成为了在互联网上和他人联系的重要方式,应用于企事业单位内部的即时通讯软件,可以推动政府机构、大型事业单位信息化的建设!因此开发该类型即时通讯软件也就具有重要的意义。1.3 系统实现的关键技术 (1) 系统开发语言选择经过认真的讨论分析,最终决定选择纯面向对象的Java语言来完成本项目的设计和实现,下面对Java语言作简要介绍。Java是一种简单、多线程、安全、容易适用、可移置、面向对象、高性能的语言。具有以下特点:面向对象:面向对象技术可以提高模块化程度和重复使用率,缩短软件开发时间降低开发成本。安全性:Java提供了许多安全机制,是一种能应用于网络和分布环境下的程序设计语言。多线程:Java具备内建的多线程功能使各线程并发、独立执行提高系统的运行效率。平台独立:平台独立是指程序不受操作平台限制可以应用于各种平台。Java源程序经过编译后能够生成字节码文件,字节码和具体的计算机无关。计算机安装能解释执行字节码的JVM就能执行字节码文件实现了Java的平台独立性。执行效率: Java程序的开发通常需要经过编写源程序、编译生成字节码和运行三个过程。这一编译过程同C/C+的编译有些不同,C编译器编译时,该代码是为在某一特定硬件平台运行而形成的,在编译过程中,编译程序通过查表将所有对符号的引用转换为相应的内存偏移量,以保证程序运行。而Java编译器却不将对方法和变量的引用编译为数值引用,也不确定程序执行过程中的内存布局,而是将这些符号引用信息保留在字节码中,由解释器在运行过程中创立内存布局,然后再通过查表来确定一个方法所在的地址。Java应用程序的开发周期包括编译、下载、解释和执行几个部分。这样就有效的保证了Java的运行效率。(2) 系统架构经过分析,我采用的软件架构是C/S架构, C/S就是指客户机/服务器模式,客户机向服务器发出数据请求,服务器将数据进行计算,计算完毕后,将计算结果返回给服务器,形成客户端和服务器之间的交互。具体的讲,就是在主机终端模式中,把原来全部集中在主机部分的任务一分为二。一部分是仍然保留在主机上的负责集中处理和汇总运算,成为服务器;而另一部分是下放到终端的部分,主要负责为用户提供友好的交互界面,称为客户机。相对于以前的模式,C/S模式最大的改进是不再把所有软件都装进一台计算机,而是把应用系统分成两个不同的角色和两个不同的地位,一般在运算能力较强的计算机上安装服务器端程序,而在一般的PC上安装客户机程序,这样就可以把主机端的一部分工作放在客户机端完成,从而减轻了主机的负担,也增加了系统对用户的响应速度和响应能力,从而提高工作效率。这种模式的优点充分利用了客户机的性能,使计算能力大大提高;另外,由于客户机和服务器之间的通讯是通过网络协议进行的,是一种逻辑的联系,因此在物理上客户机和服务器两端是易于扩充的。(3) 信息通信技术本系统实现信息通信主要是用Socket来实现的,Socket是网络编程中最常见的客户/服务器模式。可以想象一条虚拟的电缆工作在两台计算机之间,两台计算机都有一个Socket,也就是端口,电缆插在两台计算机的Socket上,一台计算机上的Socket同另一台计算机通话创建一个通信信道,我们可以利用这个信道在两台机器之间发送数据。用该模式编程时,服务器端有一个进程或多个进程在指定的端口等待客户来连接,一旦连接成功,便按设计的数据交换方法和格式进行数据传输。客户端向服务器端提出连接请求,连接之后进行通信。1.4 本文工作及内容安排本文主要是通过java语言以及局域网实现一个QQ聊天系统。第一章介绍了论文的课题背景,阐述了课题的目的与意义,概述了项目设计实现所要采用的一些关键技术;第二章对系统的需求进行分析,主要包括即时聊天消息的功能需求,即时消息的协议需求,即时信息加密和鉴别等通信息安全方面的需求;第三章介绍了系统设计,即时聊天系统的实施原理,软件设计流程,功能模块划分;第四章介绍了数据库的概要设计;第五章详细设计,服务器端的设计与实现,注册处理模块,客户端的设计与实现,以及聊天信息发送与接收;最后一章对本文所做的工作进行全面的总结,并指出了工作中的不足。3第二章 系统的需求分析第二章 系统的需求分析2.1 项目设计的需求描述 设计一个基于JAVA的网络即时通信系统,在通用计算机网络上实现信息传递,包括基本的文本消息传递,实时获取联系人状态,对常用联系人进行管理等。主要考虑以下基本功能,注册并登录服务器,验证用户,获得用户列表,用户运行客户端程序后,服务器端程序在局域网上运行,与其他用户进行点对点的实时消息通信服务。2.2 服务器端需求处理用户登录,当用户到达登陆界面时,用户发送账号、密码等信息进行分装,服务器接受到用户发送的登陆账号、密码;验证用户登录,服务器将用户登陆发送的账号和密码,与数据库中已有的用户进行匹配,如果能能找到,那么就验证成功,找不到该用户,验证失败;处理用户发送信息和处理用户得到信息,用户可以通过对话框和自己的好友进行文字类的交流,可以发送消息,同时也可以接受好友消息;处理用户退出,关闭服务器等。2.3客户端需求用户注册界面及结果,可以将用户的姓名、性别、年龄等信息分装,添加到用户数据表中,然后用户可以根据注册的账号、密码进行登录;用户登录界面及结果,用户进入登陆界面,填写自己的账号、密码,然后将其提交给服务器;用户验证界面及结果,根据服务器验证的结果,验证成功,用户可以进入登陆成功界面,验证失败,用户会得到一个登陆失败界面;用户发送信息界面及结果,用户可以双击自己的好友,然后弹出一个对话框,可以和自己的好友进行交流;用户得到信息界面及结果,当好友给自己发送消息时,用户自己的好友界面端,好友头像闪动,然后点击好友头像上,就可以接受到好友的消息。2.4 对于发送的消息的一些协议需求发送的消息必须至少使用一种消息格式,格式必须包含一个让接收者可以回消息的地址、发信者和即时收件箱的标识,以及允许对信息有效负载的编码和鉴别(非ASCII内容),而且即时消息格式必须提供扩展和注册即时消息格式的模式机制。这种模式机制,可以保证即时消息成功投递或者投递失败的时候,发信者获得足够的信息。即时通讯协议,是指参与的双方或者多方通讯时所达到的共识。协议必须是双方或者多方参与的,一方单独完成的就不算协议。这样在协议动作的过程中,双方必须交换信息,包括控制信息、状态信息等等。这些信息的格式必须是协议参与方同意并且遵循的。好的协议要求清楚、完整,每一步都必须有明确的定义,并且不会引起误解;对每种可能的情况必须规定具体的动作。本文的即时通讯协议必须提供方法保证即时消息的置信度,让即时信息未被监听、破坏、重排序或者回放,同时还必须保证即时消息被正确的实体阅读。55第三章 系统设计第三章 系统设计3.1 软件设计流程因为该系统其需求是十分明确的,所以该系统的开发流程采用瀑布模型进行设计,分为几大步骤:先进行需求分析,再是系统设计,然后是详细设计与编码,其次是软件的测试,最后是软件的运行和维护。在实际过程中这些步骤经常是重叠和彼此间有信息交换,它不是一个简单线性过程,而是包括开发步骤的多个反复。如图1所示。需求分析系统设计软件运行与维护详细设计与编码软件测试图1 即时通讯系统开发瀑布图3.2 即时聊天系统的实施原理3.2.1 工作方式和技术原理第一步,用户输入自己的用户名和密码登录服务器,服务器通过读取用户数据库来验证用户身份,如果验证通过,登记用户的IP地址、客户的姓名及时间,然后返回用户登录成功的标志。第二步,根据用户存储在服务器上的好友列表,服务器将用户在线的相关信息发送给也同时在线的好友的PC机,这些信息包括在线状态、IP地址等,好友的客户端收到此信息后将其显示在客户端界面上。第三步是服务器把用户存储在服务器上的好友列表及相关信息回送到他的客户端机,这些信息包括也在线状态、IP地址等信息。用户应用流程图如图2所示。用户登陆身份验证失败成功与好友聊天关闭聊天窗口关闭客户端新用户注册注册验证注册失败成功失败登陆失败登陆成功图2 用户体验流程图3.2.2 通讯方式(1)在线直接通讯如果用户想与他的在线好友用户聊天,他将直接通过服务器发送过来的用户好友的IP地址、TCP端口号等信息,直接向用户好友的PC机发出聊天信息,用户好友的客户端软件收到后,头像闪动,双击弹出对话框,显示在屏幕上,然后用户好友再直接回复到用户的PC机,这样双方的即时文字消息就不在服务器中转,而是直接通过网络进行点对点的通讯。(2)在线代理通讯用户与用户好友的点对点通讯由于防火墙、网络速度等原因难以建立或者速度很慢,服务器将会主动提供消息中转服务,即用户和用户好友的即时消息全部先发送到服务器,再由服务器转发给对方。3.3 功能模块划分3.3.1 服务器端服务器端完成至少3大功能:建立连接、存储数据和监听客户。这3大功能的具体含义如下:(1)建立一个ServerSocket连接,不断侦听是否有客户端连接或者断开连接。(2)服务器端是一个信息发送中心,所有客户端的信息都传到服务器端,再由服务器根据要求分发出去。(3)数据库数据操作包括将用户信息存储到数据库等。服务器端功能结构如图3。服务器端建立连接存储数据监听客户图3 服务器端功能结构图3.3.2 客户端客户端要完:用户登录、读取用户、通信交流这些功能。这些功能的含义如下:(1)用户登录:客户端与服务器端建立通信信道,向服务器端发送信息,完成用户登录。(2)通信交流:客户端可完成的信息的编辑、发送和接收等功能。该即时聊天工具按如下过程完成通信,客户向服务器登陆,告知服务器该客户监听某主题;客户登陆之后,向服务器发送消息;服务器再把消息发送给所有监听此主题的客户。客户端功能模块结构如图4客户端用户交流读取用户用户登陆用户登陆验证用户注册验证用户注册 图4客户端功能模块图43第四章 数据库概要设计第四章 数据库概要设计4.1 系统实体及实体关系图经过本人对系统数据信息的分析,设计了有用户实体、好友列表实体两个实体。用户实体属性包括了用户编号、昵称、密码、签名、性别、生日、在线头像、离线头像、消息头像等;好友列表实体包括了功能ID、用户编号、好友编号等属性。用户好友实体和好友列表实体E-R图如图5。好友用户qq编号编号消息头像生日在线头像离线头像密码昵称签名性别好友编号自己编号拥有1n图5 实体关系图根据实体关之间系,数据库设计了用户表(登录用户)、好友表(friends),另外为了方便编写用户的登陆状态和直观的表示服务器端,又添加了在线状态表(logtype)和登陆表。用的数据库是oracle10,对数据库表进行操作的软件工具是PLSQL Developer,下面将对这五张表进行详细说明。4.2 用户表 用户表主要是记录每个用户自己的信息,包括自己的qq号、昵称、密码、签名、性别、生日、在线头像、离线头像、消息头像等这些字段。其中qqnum和qqsex为数字类型,qqname、qqpass、qqdesc为字符串类型,而在线头像、离线头像、消息头像是大数据类型,生日是日期类型,主键是qqnum。主键为了标识一条记录的唯一性,保证每条记录应当具备惟一性,一张表里只有一个主键,而且主键不能为空,如表1。表1 用户信息表标识字段类型精度是否主键是否外键 编号qqnumnumber10是否昵称qqnamevarchar220否否密码qqpassvarchar220否否签名qqdescvarchar2100否否性别qqsexnumber1否否生日qqbirthdaydate否否在线头像qqolpicblob否否离线头像qqofpicblob否否消息头像qqmespicblob否否4.3 好友表(friends)好友表主要反应的是该qq好友和好友之间的关系。friid、qqnum、frinum都是数字类型的。其中friid是主键,qqnum是外键。外键表示了两个关系之间的联系。以另一个关系的外键作主关键字的表被称为主表,具有此外键的表被称为主表的从表。外键又称作外关键字。主键与外键用于区分不同的记录便于查询。外键又称作外关键字。一张表中可以有多个外键,但这些外键必须是其它表的主键,如表2。表2 好友表标识字段类型精度是否主键是否外键功能IDFriidnumber10是否编号Qqnumnumber10否是好友编号Frinumnumber10否是4.4 在线状态表(logtype) 在线状态表主要是反应用户的登陆状态的表。Typeid是数字类型,typename、typedesc是字符串类型。其中初始化数据时,10代表离线,11代表隐身,12代表在线,如表3。表3 在线状态表标识字段类型精度是否主键是否外键状态IDtypeidnumber2是否状态名称typenamevarchar210否否状态描述typedescvarchar2100否否4.5 登陆表 登陆表主要是将登陆的用户信息反映到服务器端,服务器端显示每个登陆的用户信息。其中qqnum、typeid是字符类型的,logip是字符串类型的,logtime是日期类型的,而且qqnum即时这张表的主键,也是这张表的外键,同时typeid也是这张表的外键,如表4。表4 服务器端登陆表标识字段类型精度是否主键是否外键编号qqnumnumber10是是状态IDtypeidnumber2是登陆IPlogipvarchar215登陆时间logtimedate4.6 离线信息表 离线表主要是方便用户不在线时,将离线信息存储在这个表中,当用户登录时,将信息显示给用户。其中ID是number类型的,fromuserid、touserid、message是字符串类型的,同时编号ID是这张表的主键。如表5。表5 离线信息表标识字段类型精度是否主键是否外键编号Idnumber10是用户账号fromuseridvarchar210好友账号touseridvarchar210留言信息messagevarchar2100第五章 详细设计第五章 详细设计5.1 服务器端的设计与实现C/S模式下的系统开发,很显然服务器端程序的设计是非常重要的。下面就服务器端的相关程序模块进行设计,并一定程度上实现了相关功能。使用SeverSocket s=newServerSocket(端口)语句在端口创建套接口;使用new ServerThread(socket)语句创建新的线程。服务器类调用ServerThread类,而每个ServerThread实体就是一个独立的线程,刚好对应于客户端的连接请求响应线程。每一个客户登陆,如果验证成功,将会显示在服务器端。为了更好的显示后台服务器端,设计了相应的服务器端图形界面,如图6。图6 服务器端界面 当服务器打开时会同时监听登陆线程(LoginListener)类、监听消息线程(MesListener)类这三个线程。登陆线程(LoginListener)类主要是负责服务器的用户登陆显示、发送给登陆用户好友列表、发送给登陆用户其在线好友,通知上线信息等。在服务器的登录表注册登录,并更新登陆显示的主要代码为: win.getDao().addLoginUser(lm); win.setTmodel(win.getDao().getLoginModel(); win.getTab().setModel(win.getTmodel();发送给登陆用户好友列表的主要代码为:ArrayList friList=win.getDao().getFriendsList(lm.getQqnum(); SendModel.sendFriList(lm, friList);发送给登陆用户留言 MesModel mm=win.getDao().getmesModelByID(lm.getQqnum(); if(mm!=null)SendModel.sendMes(mm, lm.getQqip(), FinalFile.CLI_MES_PORT);win.getDao().deleteMes(lm.getQqnum();5.2 用户注册模块当用户使用Client界面,点击注册账号,用户要把个人资料填写完,此时有一个注册类线程开启,同时验证用户填写的个人资料是否合法。如果合法,将注册的信息插入到用户表用户中,同时还会将申请的账号返回给用户,用户可以通过这个账号和自己注册的密码进行登录。如果不合法,系统拒绝申请,返回到登陆界面。注册模块图如图7。用户注册注册规范注册不规范用户注册验证返回给用户一个编号注册不成功界面图7 用户注册模块图注册好友的方法如下所示。public void LoginId( String qqname,String qqpass,String qqdesc,int qqsex,String qqbirthday) String sql=insert into qquser values(sq_user.nextval, +qqname+,+qqpass+,+qqdesc+,+qqsex+,+to_date( +qqbirthday+ ,yyyy-mm-dd),null,null,null);dbutil.executeDML(sql);5.3 登陆模块5.3.1登录模型图当用户使用账号和密码进行登录,这时候有一个登录线程将用户发过来的用户信息和后台数据库里的用户信息进行比对。如果用户的账号和密码与之完全匹配,则用户成功登录,并且返回给用户登录账号的好友列表、好友资料、好友状态。如果不匹配,服务器则告知登陆的用户登录失败。用户登录活动图8。登录用户登陆失败登陆成功验证登陆 返回到登陆失败界面面显示好友界面图8 登陆模型图5.3.2登录验证利用JFrame类写一个登陆界面类(ClientFrame),在登陆界面类给所有的按钮添加监听事件类(LoginFrameHandler)。点击登陆进入验证登陆环节,将登陆界面获取的登陆账号、密码、状态全部用一个登陆用户类(LoginModel)分装起来,然后写一个方法,根据获取的账号和密码,从数据库中查找,如果能找到,那么说明有这个用户,用户进入登陆成功,显示好友界面这一环节;如果根据账号和密码,从数据库中找不到该用户,那么说明密码和账号有问题,这时提示输入密码和账号有问题,请关闭当前提示,请重新登陆。实现验证登陆功能方法的代码如下。public boolean isEnter(LoginModel lm)String sql=select qqnum from qquser where qqnum=+lm.getQqnum()+ and qqpass=+lm.getQqpass()+;dbutil.setSet(dbutil.executeQuary(sql);try if(dbutil.getSet().next()return true; catch (SQLException e) / TODO Auto-generated catch blocke.printStackTrace(); finallydbutil.closeAll();return false;发送登陆信息的代码方法如下。public static void sendLogin(LoginModel lm) try socket=newSocket(FinalFile.SER_IP, FinalFile.SER_LOGIN_PORT); objout = new ObjectOutputStream(socket.getOutputStream(); objout.writeObject(lm); catch (UnknownHostException e) / TODO Auto-generated catch blocke.printStackTrace(); catch (IOException e) / TODO Auto-generated catch blocke.printStackTrace(); finally closeAll();如果上面的验证登陆成功后,那么就进入登陆成功这一环节,此时用JFrame类写一个客户端好友界面(ClientFrame),在这个好友界面里添加好友模型(FriendPanel),获取头像、姓名、签名。并在好友界面里添加监听好友模型线程类(FriListListener)、好友状态改变线程类(ChangeFriTypeListener)、以及消息线程(MesListener)。好友模型线程是为了获取好友的信息;好友状态改变线程是为了监听好友的装太多改变;消息线程是为了获取好友的消息。好友模型线程(FriListListener)类主要是显示好友列表到界面、并刷新好友列表界面等功能。实现这一功能的主要代码如下所示。ArrayListfriList=(ArrayList)objin.readObject();win.getFrisPanel().setFrisView(friList);win.getFrisPanel().repaint();win.getContentPane().repaint();win.validate();好友状态改变线程类(ChangeFriTypeListener)类,主要是将该边状态的好友重新显示在好友列表客户端,并对改变了的好友不断的刷新,这部分功能代码如下。LogUnLogModel cm=(LogUnLogModel)objin.readObject();ArrayList fpList=win.getFrisPanel().getFriPanList();for (FriendPanel friendPanel : fpList) if(friendPanel.getFriModel().getQqnum()=cm.getChangeQqnum() friendPanel.getFriModel().setLogtype(cm.getLogType(); friendPanel.getPicLab().setIcon(friendPanel.getImage();break;5.4 添加好友、删除好友、修改个人资料模块用户点击添加好友按钮,这时会弹出一个添加好友画面,用户把自己要添加的好友写入到文本框里,客户端将其封装,然后交给服务器,将好友添加到好友表里,同时刷新客户端界面,可以实现添加好友。删除好友,将删除的好友获取后,从好友表中删除,同时刷新界面即可。修改个人资料,是将自己的新昵称、新签名、新密码获取,然后在用户表中更新,同时刷新客户端界面,便可实现设置个人信息。添加好友的主要代码为:public void addFriend(int num1,int num2)String sql=insert into friends values(sq_fir.nextval, +num1+ , +num2+ ); dbutil.executeDML(sql); 删除好友的主要代码为:public void deleteFri(int num1,int num2)String sql=delete from friends where qqnum=+num1+and frinum=+num2;dbutil.executeDML(sql);修改个人资料的代码为:public void updateInfo(String name,int num,String desc ,String pass)String sql1=update qquser set qqdesc=+desc+ where qqnum=+num ;dbutil.executeDML(sql1);String sql=update qquser set qqpass=+pass+ where qqnum=+num ;dbutil.executeDML(sql);String sql2=update qquser set qqname=+name+where qqnum=+num ;dbutil.executeDML(sql2);5.5 发送和接收消息模块5.5.1 聊天流程用户登录成功后,双击好友,打开聊天面板,并填写聊天内容。消息先是由用户发送给服务器,然后由服务器转发给好友,在这里是有服务器获取到好友的ip,然后服务器将分装好的消息发送给这个ip和这个端口的好友,头像闪通,好友通过接收消息的端口接收消息,就可以实现两个用户之间的聊天。聊天流程图如图9。双击好友获取到好友的ip开启服务器消息线程开启客户端消息线程打开对话框填写消息内容服务器好友接收消息 图9 聊天流程图5.5.2发送和接收消息登陆成功后,对每一个(FriendPanel)添加双击事件类(DoubleClickHandler), 双击对方头像后,将会出现和对方的一个对话框类(SessionFrame),并对此类的按钮添加一些监听事件,通过这个点击获取到对方的信息。发送消息主要是通过socket=new Socket(ip,port),将一个消息发送给这个ip和端口的好友。当然在此之前还要判断好友是否在线,如果在线,双击这个头像,弹出对话框。 写一个类(MesListener)用来接收消息,但这里必需用一个相同的端口接收消息,同时也是将接收到的消息转换成文字流。这个时候先判断这个消息对话框是否打开,如果这个会话框是打开的,那么显示消息,显示消息主要是将回话框里的文本文档用append添加进来。如果这个回话框没有打开,那么必须先闪动头像,把消息加入消息列表。发送消息的方法代码为:public static void sendMes(MesModel mes, String ip, int port) try socket = new Socket(ip, port);objout = new ObjectOutputStream(socket.getOutputStream();objout.writeObject(mes); catch (UnknownHostException e) / TODO Auto-generated catch blocke.printStackTrace(); catch (IOException e) / TODO Auto-generated catch blocke.printStackTrace(); finally closeAll();客户端检查消息对话框是否打开、以及将消息加入消息列表的主要代码如下。MesModel mes = (MesModel) objin.readObject();int friQQnum=mes.getQqnum();for(FriendPanel fp : win.getFrisPanel().getFriPanList()if(fp.getFriModel().getQqnum()=friQQnum)if(fp.getSession().isVisible()fp.getSession().getJtaG().append(MesUtil.getMesInfo(mes, fp.getFriModel().getQqname();elsefp.getFsPane().getMesList().add(mes);fp.setMesPic();break;5.6 关闭客户端用户点击自己的客户端上的关闭按钮,此时需通知服务器下线,然后服务删除该用户,同时在服务器端,重新显示在线用户,并发送给登陆用户其在线好友,通知下线信息,即时刷新界面。关闭客户端流程图10。关闭服务器删除该在线用户通知登陆用户在线好友服务器端重新显示在线用户好友刷新界面图10 关闭客户端删除登陆用户代码的主要方法为:public void unLoginUser(int qqnum) String sql = delete login where qqnum= + qqnum;dbutil.executeDML(sql);第六章 系统测试第六章 系统测试6.1 系统测试案例 为了检测最总系统的效果,本文运用的是MyElipse 8.5软件来进行测试。在这里我先自己注册一个账号,查看注册功能是否成功,然后我用错误的账号和已注册的注册的账号分别进行登录来进行验证,去分别查看登录失败效果图,登录成功图,以及双击好友,和好友聊天等功能的实现。6.2 测试结果和分析 运行程序,进入客户端登录界面如图11。图11 客户端登录界面图点击注册按钮,就如注册界面,得到的注册效果图如图12:图12 注册效果图注册成功后,得到的申请账号成功界面如图13: 图13 申请账号成功界面图用一个错误的账号或者密码分别输入到账号、密码中进行登录验证,这时应该显示密码和账号错误,得到的提示如图14。图14 登录错误图然后再用一个正确的账号、密码进行登录,进行验证,显示登录成功好友界面。在这个好友界面里添加好友模型(FriendPanel),获取头像、姓名、签名等。客户端好友界面如图15。 图15 好友界面图然后双击自己的好友聊天,在这里比如双击自己的好友杨飞,会弹出和自己好友聊天的界面,在这个界面包括了,聊天的好友名称、时间以及对话内容,好友聊天图如图16图16 好友聊天图第七章 总结与展望第七章 总结与展望随着科学技术的发展,即时通信系统已经越来越重要,所以我很高兴的选择了这样一个毕业设计。系统着重研究并实现了网络应用的部分。根据实现的情
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 基础强化华东师大版7年级下册期末试题附答案详解(典型题)
- 解析卷北师大版8年级数学上册期末试题及参考答案详解【满分必刷】
- 2025年能源与资源行业:煤炭资源勘探与开发技术进步报告
- 2025年生物制药中试车间投资风险与收益分析报告
- 2025年职业教育实训基地建设资金申请条件与审批流程报告
- 2025年度上海教育信息化技术服务合同
- 2025版总公司与分公司知识产权保护管理合同
- 2025年度餐饮企业人才培训顾问服务协议
- 2025年度医疗影像设备监造与维修保障合同
- 2025年度科研机构项目负责人聘请与技术攻关合同
- 投资意向协议书2篇
- (完整word)工程造价咨询公司管理制度
- 电子商务运营管理培训教材
- 《战略与战略管理》课件
- 医院麻醉科诊疗常规修订版本(2022年)
- 新疆维吾尔自治区、新疆生产建设兵团2020年中考语文试卷及答案
- GB/T 23986.2-2023色漆和清漆挥发性有机化合物(VOC)和/或半挥发性有机化合物(SVOC)含量的测定第2部分:气相色谱法
- JB-T 4088.1-2022 日用管状电热元件 第1部分:通用要求
- 2023年兽医实验室考试:兽医实验室技术理论真题模拟汇编(共285题)
- 医院护理培训课件:《妊娠期急性胃肠炎护理查房》
- 重点单位消防八本台帐
评论
0/150
提交评论