• 602.00 KB
  • 2022-04-22 11:15:55 发布

基于JAVA的android即时通讯软件计算机科学与技术毕业论文.doc

  • 31页
  • 当前文档由用户上传发布,收益归属用户
  1. 1、本文档共5页,可阅读全部内容。
  2. 2、本文档内容版权归属内容提供方,所产生的收益全部归内容提供方所有。如果您对本文有版权争议,可选择认领,认领后既往收益都归您。
  3. 3、本文档由用户上传,本站不保证质量和数量令人满意,可能有诸多瑕疵,付费之前,请仔细先通过免费阅读内容等途径辨别内容交易风险。如存在严重挂羊头卖狗肉之情形,可联系本站下载客服投诉处理。
  4. 文档侵权举报电话:19940600175。
'毕业论文(毕业设计)题目:android即时通讯软件系院:XXXXX学生姓名:XX学号:XXX专业:计算机科学与技术年级:计本0902班完成日期:XXX指导教师:XXXXX 摘要在网络越来越发达的今天,人们对网络的依赖越来越多,越来越离不开网络,由此而产生的聊天工具越来越多,例如,国外的ICQ、国内腾讯公司开发的OICQ。基于Java网络编程的强大功能,本次毕业设计使用Java编写一个运行在android2.2版本以上的即时通讯软件。一般来说,聊天工具大多数由客户端程序和服务器程序外加服务器端用于存放客户数据的数据库组成,本系统采用客户端/服务器架构模式通过Java提供的Socket类来连接客户机和服务器并使客户端和服务器之间相互通信,由于聊天是多点对多点的,Java提供的多线程功能用多线程可完成多点对多点的聊天,数据库管理系统用MYSQL完成并通过ADO.Net访问数据库。本系统建立在JAVA平台上,系统的设计使用了面向对象技术和面向对象的设计原则。系统采用C/S结构,客户端与客户端以及客户端与服务器端之间通过Socket传送消息。使用JAVA语言编写,开发工具采用Eclipse。服务器端设计与实现过程中,采用了多线程技术,可以在单个程序当中同时运行多个不同的线程,执行不同的任务。大大增强了程序对服务器资源的利用。即时通讯系统完成后将可进行多人对多人的聊天,对好友进行查找和添加,对新用户的注册,发送消息、接受消息等等功能。关键字:多线程;客户机/服务器;JAVA;Socket;Eclipse;TCP/IP-30- Abstractasthenetworkbecomemoreandmoredeveloped,peoplebecomemoreandmoreleantothenetwork,andcannotleavewithoutit.Thiscausedthechatmaterialsbecomemorenumerous,astheoverseasICQsystem,theOICQsystemthatinventedbyTencentCo.,andsoon.SowecreateanetworkchatmediumjustliketheQQ.Javanetworkprogrammingbasedonthepower,theuseofJavadesignedtopreparegraduatesachatsystem.Ingeneral,themajorityofthechattoolforclientandserverprograminadditiontoserver-sidestorageofcustomerdataforthedatabase,thesystemusesaclient/serverarchitecturemodeltheadoptionofJavaprovidedSocketclassconnectclientandserverandbetweentheclientandservercommunicatewitheachother,asthechatistoprovidepoint-to-multipointandmulti-threadedJavafunctiontobecompletedbyusingmulti-threadedchatandmorepoint-to-multipoint,databasemanagementsystemwithMYSQLthecompletionandadoptionofJDBC-ODBCBridgeaccessthedatabase.ThesystembuiltontheJAVAplatform,thesystemdesignusingobject-orientedtechnologyandobject-orienteddesignprinciples.SystemusestheC/Sstructure,clientandclient-sideandserver-sideclientandsendmessagesthroughSocket.TheuseofJAVAlanguage,developmenttoolsusingEclipse.DesignandImplementationofserver-sideprocess,theuseofmulti-threadingtechnology,whichcanprocessinasinglerunatthesametimeanumberofdifferentthreads,theimplementationofdifferenttasks.Proceduresgreatlyenhancedtheuseofserverresources.Chatsystemwillallowpeopletocompletechattomorefriends,andthesystemcansearchandadd,candealwithnewuserregistration,sendmessages,receivemessagesandsoon.Keywords:Multithreading;Client/Server;JAVA;Socket;Eclipse;TCP/IP-30- 目录1绪论11.1国内外聊天系统的研究现状11.2Java语言21.2.1Java的发展历史21.2.2Java的特点31.2.3Java与Internet41.3Socket编程41.3.1关于TCP/IP协议41.3.2服务器和客户机51.4本文内容安排62需求分析72.1可行性研究72.1.1可行性分析72.1.2系统功能需求72.1.3系统性能需求82.1.4系统运行需求82.2数据流图82.2.1顶层数据流图82.2.2一层数据流图92.2.3二层数据流图93概要设计113.1系统实现原理113.2系统实现层次图:123.3各模块详细功能123.3.2服务器端结构123.3.2客户端结构144详细设计194.1系统流程图194.1.1系统总体流程图194.1.2系统客户端流程图204.2编写服务器端程序204.2.1问题陈述204.2.2解决方案214.3客户端程序编写284.3.3聊天室38参考文献46致谢45-30- 1绪论1.1国内外即时通讯系统的研究现状目前国内外做即时通讯软件的公司很多,产品也琳琅满目,国内有诸如腾讯QQ、新浪UC、网易泡泡等,国外有著名的MSN(新版改名为LiveMessenger)以及跨平台Gaim等。本人取最具代表性的QQ和MSN进行了一些研究,作为我开发即时通讯的准备。腾讯无疑是国内即时通讯市场的霸主,自从99年进入即时通讯领域并迅速占市场之后,其在国内用户数量始终高居榜首,即使近几年面对微软MSN的强大攻势,腾讯QQ的时常占有率依然稳步增长。腾讯的成功与其对QQ的不断创新和完善是分不开的。参考了许多网络上的资料,以及自己通过观察腾讯QQ运行时的各种细节。可以确定腾讯QQ是以多服务器提供服务、服务器总控客户端、客户端之间UDP直连通信的。并且在两个客户端之间不能建立直连的情况下,才由服务器进行中转通信。其模型如图1-1图1-1腾讯QQ服务器-客户端模型1与腾讯QQ不同,微软的MSNMessenger只使用了TCP作为传输层通信协议,所有客户端与服务器进行连接,然后通过与服务器的TCP连接进行中转通信。-30- 其模型如图1-2图1-2MSN服务器-客户端模型2腾讯使用的模型中,服务器主要处理客户端各种状态的控制,可以极大减轻服务器的处理压力,但其内部协议和实现复杂度都较高。而MSNMessenger所有数据都要经过服务器,所以服务器方的数据量会大一些(这也是平时很少见到使用MSN进行语音视频聊天的)。综合腾讯QQ和微软MSNMessenger的特点和我所学专业技术范畴,我打算在我的系统中尝试建立MSN的服务器-客户端模型,但以单服务器提供服务。1.2Java语言1.2.1Java的发展历史Java的发展历史,可以追朔到1990年。当时SunMicrosystem公司为了发展消费类电子产品进行了一个名为Green的项目计划。这个计划的负责任是JamesGosling。起初他用具有面向对象特征的C++语言编写嵌入式软件,可以放在面包机或PDA(PersonalDigitalAssistant,个人数字主力)等小型电子消费这杯里,以使设备变得更为“聪明”,更具备人工只能。但后来发现C++并不适合这类任务;因为C++常会使系统失效。尤其在内存管理方面,c++采用直接地址访问方式。需要程序员记录并管理内存资源。这造成程序员编程的极大负担,并可能产生多个Bugs。面包机上的程序错误可能使面包机烧坏甚至爆炸。-30- 为了解决此类问题,Gosling决定开发一种新的语言,并取名为Oak。它采用了大部分与C++类似的语法对可能具备危险性的功能加以改进,例如将内存管理改为由语言自己进行管理,以减少程序员的负担及可能发生的错误。Oak是一种可移置的语言,它是一种平台独立的语言,能够在各种芯片上执行,可以降低设备的研发成本。1.2.2Java的特点Java是一种简单、安全、容易适用、面向对象、可移置、高性能、多线程的语言。1.简单性Java语言简单高校,基本Java系统(编译器和解释器)所占空间不足250KB由于Java最初是为了对家用电器进行集成控制而设计的,因而具备简单命了的特征。2.面向对象面向对象技术是现代工业的一次革新,提高了软件的模块化程度和重复适用率,缩短了软件开发时间,减低了卡发成本。在Java之前虽然已经有面向对象的程序设计语言问问世,但有些如c++并不是完全的面向对象,而是面向过程和面向对象的混合体。Java则是完全面向对象的程序设计语言。3.安全性Java是可以用在网路及分布环境下的网路程序设计语言。在网路环境下,语言的安全性变得更为重要。Java提供了许多安全机制来保证其适用上的安全性。4.平台独立平台独立指程序不受操作平台的限制,可以应用在各种平台上。Java源程序经过编译后生成字节码文件,而字节码与具体的计算机无关。只要计算机安装了能解释执行字节码的Java虚拟机JVM,就可以执行字节码文件,从而实现Java的平台独立性。5.多线程Java具备内建的多线程功能,可以将一个程序的不同程序段设置为不同的线程,使各线程并发、独立执行,提高系统的运行效率。6.网络功能Java能从全球网络资源获取所需信息,如数据文件、影响文件、声音文件等,并对所得信息进行处理,所以说Java是一种网络语言。7.执行效率Java的字节码需要经过Java虚拟机JVM解释成机器码才能执行,所以速度上较慢。但是随着JVM技术的进步,使得其执行速度直逼C与C++。1.2.3Java与InternetJava语言取得成功的领域之一就是网络(其他语言)数页代码---->(Java)一条语句。TCP/IP(传输控制协议/网间协议)是internet的主要协议,定义了计算机和外设进行通信所使用的规则(应用层,传输层,网络层,链路层).大多数基于internet的应用程序被看作TCP/IP协议的上一层.如:ftp,http,smtp,pop3,telnet,nntp等。  IP地址:TCP/IP网络中的每台计算机都有唯一的地址--IP地址.-30- 在Java中,有一个用来存储internet地址的类叫InterAddress.Java提供的网络功能有三大类:URL,Socket,Datagram.1、URL是三大功能中最高级的一种,通过URLJava程序可以直接送出或读入网络上的数据.2、Socket是传统网络程序最常用的方式,可以想象为两个不同的程序通过网络的通信信道.3、Datagram是更低级的网络传输方式,它把数据的目的纪录在数据包中,然后直接放在网络上1.3Socket编程1.3.1关于TCP/IP协议TCP协议是网络通信的基石,对此,Java专门提供了Socket的类库,在其中抽象出TCP协议通信的常用方法:TCP协议与三次握手:在讲述TCP协议流程前,先来声明两个重要的概念:(1)客户端,首先发送TCP请求的是客户端,客户端一般是服务(比如数据查询服务)的请求者。(2)服务器,在接收到客户端的请求后(确保同客户端的通信信道建立)服务器会向客户端提供服务。服务器一般是服务的执行者,会向客户端返回服务执行的结果。为了实现客户端同服务器端的通信,客户端首先发送一个“SYN”数据包。如果服务器收到SYN标记,它将发回一个“SYN+ACK”数据包。接着,客户端为了表示收到了这个SYN+ACK信息,会向服务器发送一个最终确认信息(ACK包)。这种SYN,SYN+ACK,ACK的步骤被称为TCP连接建立时的“三次握手”,在这之后,连接就建立起来了,这个连接将一直保持活动状态,直到超时或者任何一方发出一个FIN(结束)信号。这种通信模式也叫客户端/服务器(C/S)模式。ACK=1第一次握手,主机A向主机B发送连接请求第二次握手,主机B收到主机A的请求,向主机A回发一个确认,,同时向主机A发送一个连接请求第三次握手,主机A收到主机B发送的数据包在向主机B发送一个确认连接主机A主机BSYN=1,SEQ=ACK=1,SYN=1,SEQ=aaaaaaaaaa图1-3三次握手协议由此可见,通过客户端和服务器的“三次握手”-30- ,双方可以建立畅通的通信信道,在此信道上双方互相传输数据。1.3.2服务器和客户机网络最基本的目的就是让两台机器连接到一起,并相互“交谈”或者“沟通”。一旦两台机器都发现了对方,就可以展开一次令人愉快的双向对话。但它们怎样才能“发现”对方呢?这就像在游乐园里那样:一台机器不得不停留在一个地方,侦听其他机器说:“嘿,你在哪里呢?”“停留在一个地方”的机器叫做“服务器”(Server);到处“找人”的机器则叫做“客户机”(Client)或者“客户”。它们之间的区别只有在客户机试图同服务器连接的时候才显得非常明显。一旦连通,就变成了一种双向通信,谁来扮演服务器或者客户机便显得不那么重要了。所以服务器的主要任务是侦听建立连接的请求,这是由我们创建的特定服务器对象完成的。而客户机的任务是试着与一台服务器建立连接,这是由我们创建的特定客户机对象完成的。一旦连接建好,那么无论在服务器端还是客户机端,连接只是魔术般地变成了一个IO数据流对象。从这时开始,我们可以象读写一个普通的文件那样对待连接。所以一旦建好连接,我们只需使用自己熟悉的IO命令即可。这正是Java联网最方便的一个地方。图1-4服务器和客户机的连接1.4本文内容安排本论文内容安排如下:第二章为聊天系统的需求分析,主要介绍系统的可行性研究,需求分析流程图等。第三章为概要设计,分模块介绍系统的具体实现过程。第四章为详细设计。-30- 2需求分析2.1.1可行性分析经济可行性:由于本系统的主要背景是毕业课程设计,不注重直接的经济效益和其后的发展方向,只在注重自身水平和能力的提高,对自身的经济要求也不高,只要有一台能运行Java软件的电脑便可,所以不用考虑到经济问题。技术可行性:本系统的开发利用MicrosoftSQLServer2005作为本系统的数据库,它是一个支持多用户的新型数据库,适用于大中规模的数据量需求。学校校园网的建设也为新系统服务器/客户端的结构提供了硬件的支持。使用Java作为系统开发的开发环境,它提供完善的指令控制语句、类与对象的支持及丰富的数据类型,给开发高性能系统提供的保障为开发满足客户要求的系统,保证了代码的模块化要求,而代码模块化的提高,非常有利于以后对新系统的扩展与修改。运行可行性:本系统为一个小型的即时聊天系统,所耗费的资源非常的小,现在一般的电脑无论是硬件还是软件都能够满足条件,因此,本系统在运行上是可行的。综上所述,本系统的设计与开发在技术上和硬件设备上的条件都是满足的,因此,它在技术上是可行的。2.1.2系统功能需求本系统主要通过客户端,服务器端来体现即时通讯的基本功能。(1)服务器端1.处理用户注册2.处理用户登录3.处理用户发送信息4.处理用户得到信息5.处理用户增删改请求6.处理用户退出(2)客户端1.用户注册界面及结果2.用户登录界面及结果3.用户发送信息界面及结果4.用户得到信息界面及结果5.用户请求增删改及结果6.用户退出界面及结果-30- 2.1.3系统性能需求实用性:为信息交流提供方便,有效进行作业管理。操作简单:本系统应该适用于不同水平的使用者,包括事业单位和企业单位,同时系统不应太复杂和烦琐,因此要求系统的操作尽可能简单易行。技术先进:产品的系统设计和开发应紧跟着整个计算机发展潮流,采用当时最先进的设计思想,利用最新的开发技术和开发工具。使系统能够无论在功能设计上,还是在技术实现上,都处于同行业的领先地位。安装使用简便:服务器端的安装简洁明了,客户机无需再装任何软件就可以直接注册登陆聊天。适应性:应该能广泛应用于不同类型的企事业单位。系统采用模块化设计,用户可以根据自己的实际情况自行组合,使系统在不同的硬件环境下都能得以应用。代码可读性好:文中的代码将尽可能简洁,易懂。2.1.4系统运行需求1、移动客户端需500MHz及以上的处理器2、移动客户端需256MB及以上的ROM空间3、移动客户端需256MB及以上的RAM空间4、移动客户端需具有WiFi/GRPS网络接收模块,能正常连接到网络5、服务端需具有P41.6GHz及以上的处理器6、服务端需具有80GB及以上的硬板空间7、服务端需具有1GB及以上的内存空间2.2数据流图聊天用户服务器聊天用户2.2.1顶层数据流图图2-1顶层数据流图-30- 2.2.2一层数据流图聊天用户客户端服务器端数据流聊天用户.2.2.3二层数据流图用户登录用户注册用户客户端服务器端处理用户退出用户请求信息用户聊天信息-30- 图2-3系统二层数据流图3概要设计3.1系统实现原理即时通讯的设计跟普通网站设计有着许多不同的地方,普通网站设计所考虑的因素,例如,普通网站需要对布局进入大量美化以及动画设计等等,而即时通讯只要提供满足访客双方直接实时聊天即可。因此,在设计聊天系统的过程中,必须要考虑好以下几个设计要点:在Internet上的聊天程序一般都是以服务器提供服务端连接响应,使用者通过客户端程序登录到服务器,就可以与登录在同一服务器上的用户交谈,这是一个面向连接的通信过程。因此,程序要在TCP/IP环境下,实现服务器端和客户端两部分程序。图3-1系统实现原理图-30- 3.2系统实现层次图:Socket连接客户端服务器端实时聊天好友信息请求更新信息请求好友添加/删除注册/登录请求聊天消息转发好友信息查询用户信息更新好友添加/删除用户注册/登录3.3各模块详细功能3.3.1服务器端结构服务器监听控制窗体Server启动服务器监听AppServer处理所有用户请求Connection-30- 图3-3服务器端结构图Server.java:服务器启动监听操作。DBUtil.java:服务器端连接数据库,负责服务器端与数据库连接读取数据操作。InputThread.java:服务器端监听接收客户端发来信息,处理各种请求。OutputThread.java:服务器端向客户端发送消息。TranObject.java:服务器端与客户端消息交换的对象类型。TranObjectType.java:服务器接受客户端发来消息的所有类型。UserDao.java:定义一个与所有用户操作相关的接口。UserDaoImpl.java:UserDao的具体实现类。运行客户端Welcome用户登陆Login用户注册Register用户主窗体FriendList用户监听GetMsgService3.3.2客户端结构图3-4客户端结构图GetMsgService.java:客户端启动一个服务。WelcomeActivity.java:客户端启动欢迎页面。RegisterActivity.java:客户端在线注册界面。ChatActivity.java:客户端聊天界面。AddFriendActivity.java:客户端查找好友界面并提供添加好友功能。UserlistAdapter.java:客户端好友信息数据。OwnInfodata.java:客户端自己信息数据成员。RegisterInfo.java:客户端注册信息数据成员。UserInfodata.java:客户端好友信息数据成员。Userdata.java:客户端用户信息数据。RegisterActivity.java:客户端注册界面及交互。LogonActivity.java:客户端登录界面及交互。ChartActivity.java:负责客户端聊天窗体及交互。UserInfoActivity.java:客户端好友信息界面及交互。OwnInfoActivity.java:客户端自己信息界面及交互。-30- FindUserActivity.java:负责客户端好友查找界面及交互。UserListActivity.java:客户端在线用户界面与交互。SocketClient.java:客户端连接服务器及与服务器进行交互。GalleryTabactivity.java:客户端主界面,负责各项窗体操作和数据分配及交互。4详细设计4.1系统流程图4.1.1系统总体流程图开始jj敬爱是启动服务器判断启动信息启动客户端判断登录信息登录服务器退出服务器注册用户结束jj敬爱是否是是图4-1系统总体流程图4.1.2系统客户端流程图开始客户端登录判断主界面聊天界面好友信息界面个人信息界面退出结束-30- 图4-2客户端流程图4.2编写服务器端程序4.2.1问题陈述1.能过接收用户注册信息并保存。2.能够允许注册过的用户登录聊天界面。3.能够与在线好友进行自由聊天。4.服务器运行在自定义的端口8080上。5.服务器监控用户列表和对用户消息进行转发。6.服务器对用户的请求作出处理。7.服务器对在线下线列表进行更新。4.2.2解决方案4.2.2.1后台数据库设计基于服务器跨平台运行的架构,服务器的后台数据库使用了SQLServer2005。(1)userInfo表:userInfo表此表主要包含了用户帐户基本信息。即时通讯系统采用账户、密码的登录方式,给每个用户生成一个唯一ID来做系统内部的用户标识。(2)friend表-30- friend表此表主要包含了用户好友ID关系信息。4.2.2.2用户注册1.去数据库读数据首先创建一个字符串连接并写入查询命令,利用dataset保存临时数据,留作后面注册时用。2.客户端请求注册客户端通过RegisterActivity.java请求注册,填写注册信息,并验证各项信息格式是否符合规定,如果不符合规定格式,则进行提示重新填写,最后将请求信息发送给服务器端。下面是注册验证账户代码:-30- 3.服务器端响应服务器端得到注册请求会将对象输入流转化为文件输出流,并反馈给客户端。客户端得到注册信息后会在前台填写注册信息,然后创建文件输出流,再用对象输出流包装后写入本地文件将其持久化。最后关闭对象输出流和文件输入流。//将向量中的类写回文件FileOutputStreamfile=newFileOutputStream(fList);ObjectOutputStreamobjout=newObjectOutputStream(file);objout.writeObject(vList);4.给客户端返回信息将用户注册成功或失败的信息用打印流包装Socket以后,输出给客户端注册结果的详细信息。//发送注册成功信息toClient.println(clientMessage.custName+"注册成功");Datet=newDate();-30- log("用户"+clientMessage.custName+"注册成功,"+"注册时间:"+t.toLocaleString()+"n");5.关闭Socket连接当以上的程序都正常运行后,需要关闭Socket连接,否则将会浪费服务器与客户端之间的资源。4.2.2.3用户登陆1.去数据库读用户数据打开用户数据库文件“User.txt”,将用户数据对象集载入内存,以供下面的程序使用。//读文件FileInputStreamfile3=newFileInputStream("user.txt");ObjectInputStreamobjInput1=newObjectInputStream(file3);vList=(Vector)objInput1.readObject();2.验证用户名是否存在在对象数据库中查找是否有与登录用户的用户名相同的记录,如果有继续验证,否则退出验证处理,返回“没有此用户”错误用户登陆程序模块如下:if(reg.custName.equals(clientMessage2.custName)){find=1;if(!reg.custPassword.equals(clientMessage2.custPassword)){toClient.println("密码不正确");break;}else{//判断是否已经登录intlogin_flag=0;for(inta=0;a=50){toClient.println("登录人数过多,请稍候再试");break;4.2.2.4用户退出1.接收退出信息-30- 当用户退出时,客户端将会用基于Socket的对象输出流发送给服务器退出对象。2.在线列表中删除用户用户退出后应该把用户从在线列表中删除,否则用户退出用户还在在线列表中,那么该用户下次将会无法登录。3.更新在线列表用户退出后将服务器端监控界面的用户列表更新。否则用户数据将会不同步。用户退出模块程序:publicvoidserverExit(){Exitexit=newExit();exit=(Exit)obj;removeUser(exit);//chenminif(sFrame.ti.equals(exit.exitname)){sFrame.ti="";}Datet=newDate();log("用户"+exit.exitname+"已经退出,"+"退出时间:"+t.toLocaleString());freshServerUserList();}4.2.2.5接收用户聊天信息1.接收用户聊天信息当用户发送聊天信息时,服务端将会收到客户端用Socket传输过来的聊天信息对象,然后将其强制转换为Chat对象。2.过滤用户聊天内容的非法信息分析聊天信息对象的聊天内容,用语言过滤类将非法字符过滤掉。语言过滤的时候将会打开“badword.txt”文件,不允许出现的关键词将会存储在文件中,关键字之间以逗号分割。当聊天内容中出现要过渡的关键字是将会被系统屏蔽,而聊天内容3.接收服务器端的系统消息当有其他用户登陆时,系统会给在线的所有用户发送用户登陆信息,并且通过服务器可以给各用户发送系统消息。系统消息发出后,如再有登录者也可以接收到系统消息。4.返回给客户端当以上信息都封装成功后,打开与客户端连接的Socket的输出流,然后再用ObjectOutputStream对象输出流包装后输出给客户端。-30- publicvoidserverChat(){//将接收到的对象值赋给聊天信息的序列化对象ChatcObj=newChat();cObj=(Chat)obj;//chenmincObj.chatMessage=WordFilter.filter(cObj.chatMessage);chatLog(cObj);//将聊天信息的序列化对象填加到保存聊天信息的矢量中userChat.addElement((Chat)cObj);return;}4.3客户端程序编写4.3.1程序将通过AddFriendActivity.java用户注册界面收集用户的用户名、密码、电子邮箱。如上图所示客户端用户注册信息模块程序(通过调用系统本省已经定义好的向服务器发送信息的方法直接将页面注册的信息发送到服务器端):Clientclient=application.getClient();//Clientclient=GetMsgService.client;-30- ClientOutputThreadout=client.getClientOutputThread();TranObjecto=newTranObject(TranObjectType.REGISTER);Useru=newUser();u.setEmail(email);u.setName(name);u.setPassword(passwd);//u.setPassword(Encode.getEncode("MD5",passwd));o.setObject(u);out.setMsg(o);4.3.2用户登录4.3.2.1收集用户登录信息程序将通过LoginActivity.java用户登录界面收集用户的用户名、密码,如图图4-15收集用户登录信息图Stringaccounts=mAccounts.getText().toString();Stringpassword=mPassword.getText().toString();if(accounts.length()==0||password.length()==0){DialogFactory.ToastDialog(this,"QQ登录","亲!帐号或密码不能为空哦");}else{showRequestDialog();-30- //通过Socket验证信息if(application.isClientStart()){Clientclient=application.getClient();ClientOutputThreadout=client.getClientOutputThread();TranObjecto=newTranObject(TranObjectType.LOGIN);Useru=newUser();u.setId(Integer.parseInt(accounts));//u.setPassword(Encode.getEncode("MD5",password));u.setPassword(password);o.setObject(u);out.setMsg(o);}else{if(mDialog.isShowing())mDialog.dismiss();DialogFactory.ToastDialog(LoginActivity.this,"QQ登录","亲!服务器暂未开放哦");}}4.3.3聊天室当用户登录成功后,用户的登录界面将会隐藏,然后创建用户聊天室窗口,在界面的标题栏将会显示当前登录用户的用户名,以防止一个机器上的用户开多个账号进入聊天室后分不清哪个窗口是哪个用户登录的,界面第一行将显示当前在线人数。位于界面正中的两个控件分别是List和TextBox用来显示当前服务器上的在线会员名单列表和公共聊天信息。位于界面下方的就是一些用于聊天的功能控件和聊天内容个性化配置控件。包括聊天对象,聊天语气,聊天内容,聊天字体,风格,大小,颜色…….4.3.3.1用户发送信息用户需要发送信息时,在聊天内容里写下要发送的信息,然后点击发送就可以发送到其他客户端,也可以选择私聊,聊天表情,聊天信息通过服务器发送到其他客户端。如图:-30- 当多个用户同时在线时可以对某个人私聊,可以查看到最近聊天用户的列表:Useru=newUser();u.setName(entity.getName());u.setId(entity.getId());-30- u.setImg(entity.getImg());Intentintent=newIntent(context,ChatActivity.class);intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);intent.putExtra("user",u);context.startActivity(intent);//Toast.makeText(Tab2.this,"开始聊天",0).show();application.setRecentNum(0);4.3.3.3保存聊天记录当用户需要保存聊天记录时可以直接点击“保存”按钮,为了防止多用户聊天记录文件冲突问题,聊天记录将会以“用户名_message.txt”为文件名,将信息保存在当前应用程序目录下。如图保持模块程序://"保存"按钮publicvoidsaveMessage(){try{FileOutputStreamfileoutput=newFileOutputStream(this.strLoginName+"_message.txt",true);Stringtemp=taUserMessage.getText();//System.out.println(temp);fileoutput.write(temp.getBytes());fileoutput.close();JOptionPane.showMessageDialog(null,"聊天记录保存在"+this.strLoginName+"_message.txt");}catch(Exceptione){System.out.println(e);}}4.3.3.4显示系统时间当用户需要查看当前时间时,可以直接点击“时钟”按钮,将会启动一个漂亮的电子时钟,-30- 时钟模块程序:publicvoidactionPerformed(ActionEvente){timer.restart();}publicvoidpaint(Graphicsg){Insetsinsets=getInsets();intL0=(insets.left)/2,T0=(insets.top)/2;inthh,mm,ss;Stringst;h=getSize().height;//绘制圆形……………………………………………………//获取时间Calendarnow=Calendar.getInstance();hh=now.get(Calendar.HOUR_OF_DAY);//小时mm=now.get(Calendar.MINUTE);//分钟ss=now.get(Calendar.SECOND);//秒g.setColor(Color.pink);g.fillRect(L0,T0,60,28);//填充的矩形g.setColor(Color.blue);if(hh<10)st="0"+hh;elsest=""+hh;if(mm<10)st=st+":0"+mm;elsest=st+":"+mm;if(ss<10)st=st+":0"+ss;elsest=st+":"+ss;g.drawString(st,L0,T0+25);//计算时间和图形的关系sdo=90-ss*6;mdo=90-mm*6;-30- hdo=90-hh*30-mm/2;//擦除秒针……………………………//绘制秒针g.setColor(Color.yellow);x=(int)((r-8)*Math.cos(RAD*sdo)+x0);y=(int)((r-8)*Math.sin(RAD*sdo)+y0)-2*T0;g.drawLine(x0,y0,x,(h-y));old_X=x;old_Y=y;//绘制分针line(g,mdo,(int)(r*0.7),Color.green);//绘制时针line(g,hdo,(int)(r*0.5),Color.red);}//endpaint图4-22屏蔽聊天信息FileReaderfileReader=newFileReader(files);BufferedReaderread=newBufferedReader(fileReader);while(true){Stringline=read.readLine();if(line==null){break;}fileString+=(line);//fileString+=(line+"n");}read.close();//System.out.println(fileString);}catch(FileNotFoundExceptione){-30- //TODO自动生成catch块e.printStackTrace();}catch(IOExceptione){//TODO自动生成catch块e.printStackTrace();}returnfileString;}4.3.3.6退出聊天系统当前用户点击“退出”按钮或者关闭窗口时,系统将会把用户退出的信息打包成对象发送给服务器,并退出客户端程序。//"退出"按钮publicvoidexit(){Exitexit=newExit();exit.exitname=strLoginName;//发送退出信息try{SockettoServer=newSocket(strServerIp,1001);//向服务器发送信息ObjectOutputStreamoutObj=newObjectOutputStream(toServer.getOutputStream());outObj.writeObject(exit);outObj.close();toServer.close();frmChat.dispose();//this.destroy();}catch(Exceptione){}privatevoidexitChatRoom(){exit();}4.3.3.7出现异常信息在用户聊天时,当服务器关闭或者与服务器无法连接时,客户端将会给出“不能连接到服务器!”的信息。并在用户查看后退出客户端。-30- 参考文献[1]孟凡荣.数据库原理与应用.中国矿业大学,2009(8)28-30[2]张虹.软件工程与软件开发工具.清华大学出版社.2009(1)55-75[3]BruceEckel.ThinkinginJava.机械工业出版社.2009(6)42-64[4]罗军舟等.TCP/IP协议及网络编程技术.清华大学出版社.2008(10)[5]孙一林,彭波.Java网络编程实例.清华大学出版社.2003(4)[6]李树青.Java通用范例开发金典.电子工业出版社.2009[7]王鹏.JavaSwing图形界面开发与案例详解.清华大学出版社.2008[8]庞永庆,翟鹏.Java完全自学宝典.清华大学出版社.2008[9]刘永华,于春花.Java网络编程.清华大学出版社.2008[10]BoostDocumentation,http://www.boost.org或http://boost.sourceforge.net[11]Boost.AsioDocumentation,http://asio.sourceforge.net[12]孙桂兰.电子商务网上书店系统.北京:人民邮电出版社,2004[13]JaloteP.Optimumcontrollimitsforemployingstatisticalprocesscontrolinsoftwareprocess.IEEETransonSoftwareEngineering,2002,28(12)[14]萨师煊,王珊.数据库系统概述.第三版.北京:高等教育出版社,2004.[15]B.Ford,M.I.T.,P.Srisuresh,etc.Peer-to-Peer(P2P)communicationacrossmiddleboxes.http://midcom-p2p.sourceforge.net/draft-ford-midcom-p2p-01.txt2004[16]飞思科技产品研发中心.Java2应用开发指南[J].北京:电子工业出版社,2002[17]薛为民,夏文红,解仑.Java应用教程北京:北京交通大学出版社2005[18]http://java.sun.com[19]http://www.microjava.com/[20]http://www.csdn.net/[21]http://www.cnjm.net/tech/article1101.html-30- 致谢本文讨论了如何利用JAVA技术开发聊天室系统,基本满足了结构化、界面友好、速度快、安全性以及稳定性等特点。在当今电脑网络密布的世界当中,一个简单高效的局域网通信工具是如此的具有实用性,所以我们应当重视对它的相关研究与开发。在这次的毕业设计中,我应用了JAVA开发工具在WINDOWS平台上开发了一个基于WINDOWS平台的局域网通信工具,在这一重要的领域进行了相关的实践,不管是对我的研究能力,还是实际动手能力,还是资料查阅能力,都起了相当大的益处。所以,我决定认真总结这次毕业设计的经验,以及学习到的知识,来更加的充实自己的头脑和完善自己的知识结构。系统着重研究并实现了网络应用的部分。根据实现的情况看,具有较友好的聊天界面生成效果,以及流畅的网络通信效果。生成的聊天室可以达到基本的聊天要求,具有较高的研究价值。一个月的忙碌和工作,本次毕业设计已经接近尾声,作为一个专科生的毕业设计,由于经验的匮乏,难免有许多考虑不周全的地方,如果没有导师的督促指导,以及一起工作的同学们的支持,想要完成这个设计是难以想象的。在这里再次感谢我的导师XXX老师。通过毕业设计,发现自己在理论研究和实际工作能力等方面都得到了提高,受益匪浅,同时在老师的指导和课题组同学的共同帮助下,及时总结研究成果,这些无疑会对我今后的工作和学习带来很大的帮助。进入社会后,我以后会更加努力,是学校给我学习的机会,在以后的生活中继续提高自己,为自己创造更多的机会,更好的明天!-30-'