版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、学位论文一个简单的即时通讯工具的设计与开发论文作者姓名:申请学位专业:网络工程申请学位类别:工学学士指导教师姓名(职称):论文提交日期:2007年06月10日一个简单的即时通讯工具的设计与开发摘要即时通讯(InstantMessaging)是目前Internet上最为流行的通讯方式,各种各样的即时通讯软件也层出不穷;服务提供商也提供了越来越丰富的通讯服务功能。Java是当前比较流行的开发语言之一,它有着自己的易用特点与性能优势,比如跨平台、安全性、多线程、网络Socket编程、数据流概念等方面,因此通过对开源即时通讯LinuxQQ的研究和分析,基于Java语言和J2EE规范设计了一个即时通讯工
2、具JICQ(JavaforIseekyou),并对其体系结构、构成模块及系统关键技术进行了分析与设计。在系统设计与建模过程中,使用了UML和面向对象的分析、设计方法,并使用Rose作为建模工具;本系统基于j2sel.5,j2eel.4,使用Eclipse等作为开发工具,在开发过程中用到了时下流行的重构开发方法,优化了系统的设计。力图使系统具有安全、高效、实用支持在不同系统平台运行等特点。关键词:即时通讯;多线程;SOCKET编程;JSPDesignandDevelopmentofaSimpleInstantCommunicationToolAbstractInstantMessageiscur
3、rentlythemostpopularwaytocommunicateontheInternet,sovariousInstantMessagingsoftwarearecontinuouslyappearing;Serviceprovidersoffermoreandmorecommunicationservicenowadays.Javaprogramminglanguage(Java2StandardEdition)isoneofpopularprogramminglanguages.Withitsfeaturesofcross-platform,security,multi-thre
4、adedcapability,SocketProgramming,dataflowconceptsandsoon,Javahasitsowndistinctiveandfunctionaladvantages.Therefore,basedontheresearchandanalysisofLinuxQQ,withtheJavalanguageandJ2EE,thispaperdesignsaninstantmessengerJICQ(JavaforIseekyou),andthenanalyzesitsarchitecture,modules,aswellasitskeytechnologi
5、es.Duringthedesignandmodelingprocessofinstantmessengersystem,theUMLandmethodofobject-orientedanalysisanddesignareused.Furthermore,themodelingtoolofRoseisincluded.Basedonthesystemj2se1.5,j2ee1.4,theEclipsedevelopmenttoolinthedevelopmentprocess,andrefactoringdevelopmentmethod,thesystemdesignisoptimize
6、d.Duetothesefactors,thesystemissafe,efficientandpracticalindifferentoperatingsystemplatforms.Keywords:instantmessage;multithreaded;socketprogram;JSP目录论文总页数:30页TOC o 1-5 h z HYPERLINK l bookmark10 1引言1 HYPERLINK l bookmark12 项目开发背景1 HYPERLINK l bookmark14 项目背景1 HYPERLINK l bookmark16 技术背景1该系统设计的意义2 H
7、YPERLINK l bookmark18 2相关理论及基础技术与开发平台2 HYPERLINK l bookmark20 即时通讯应用工作原理分析2 HYPERLINK l bookmark22 所用技术3 HYPERLINK l bookmark24 工具及开发平台4 HYPERLINK l bookmark26 系统配置要求5 HYPERLINK l bookmark28 3系统体系结构的设计5需求描述5 HYPERLINK l bookmark30 系统架构设计6系统的总体功能设计7总体功能设计7 HYPERLINK l bookmark32 注册模块设计8 HYPERLINK l b
8、ookmark34 登录模块设计10 HYPERLINK l bookmark36 用户间交互模块设计12数据库设计14 HYPERLINK l bookmark38 数据库物理模型14 HYPERLINK l bookmark42 数据字典15 HYPERLINK l bookmark40 4系统实现16 HYPERLINK l bookmark44 网络通讯编码实现16聊天客户端部分代码16服务器端监听与转发消息代码17服务端单线程上线处理代码18系统运行的效果图20登录界面20主界面20群聊天界面21好友聊天界面22 HYPERLINK l bookmark58 好友查找界面23注册模块
9、的实现24数据库连接24字符编码过滤器的核心代码24注册模块运行效果图25主页面25注册页面255系统测试与运行26结论27 HYPERLINK l bookmark70 参考文献28致谢29声明30第 页共30页1引言项目开发背景项目背景“即时通信产品”最早的创始人是三个以色列青年,是他们在1996年做出来的,取名叫ICQ(Iseekyou)。随后,腾迅QQ抓住IM的大好机遇,在中国迅速崛起并垄断即时通讯市场。自从腾迅的QQ在中国即时通讯行业垄断后,即时通讯的产品在IT行业可谓雨后春笋,层出不穷,目前Windows平台方面的即时通讯已经很多,但是其他系统比如Linux平台,虽然有类似QQ方面
10、的一些产品,比如LinuxQQ,Lunaqq,但数量毕竟不多且功能界面等都还不是很理想,鉴于此种情况,我们开发了基于Java语言的即时通信系统(JICQ),该系统是以J2SE(Java2StandardEdition)语言实现的网络即时通信工具,包括服务器端和客户端,可以在企业内部网络和互联网上运行,同时具有Java应用的跨平台特性,方便运行在各个系统之上。该系统具有相对比较漂亮的界面以及类似于QQ的很多功能,比如可以和好友进行交流以及离线发送与好友管理、可以加入不同的群,即时发送、即时回复等功能。技术背景技术上采用sun公司的java语言,该语言有很多有点,比如多线程、网络流概念、异常捕获处
11、理、安全性以及速度与性能等方面,并且具有可以一次编写、到处运行的跨平台优点。多线程:多线程是这样一种机制,它允许在程序中并发执行多个指令流,每个指令流都称为一个线程,彼此间互相独立,线程又称为轻量级进程,多线程技术允许你在一个应用程序中启动多个执行轻量程序,使多段程序同时竞争CPU资源,从而提高系统效率。而对于网络通讯工具来说,多线程的特性是必须的,不仅是为了效率,而且可以实现同时处理多个请求。网络流:java中的网络通讯以及文件的读取都是以一种流的概念来理解的,这样,网络上数据的传输其实就等同于看成一台机器上文件的读取,有利于理解与编写运用程序,java类库中提供了丰富的IO流类资源以及网络
12、编程类资源,软件开发人员可以很方便的编写网络应用程序。例外处理:Java通过面向对象的方法来处理例外。在一个方法的运行过程中,如果发生了例外,则这个方法生成代表该例外的一个对象,并把它交给运行时系统,运行时系统寻找相应的代码来处理这一例外。我们把生成例外对象并把它提交给运行时系统的过程称为抛弃(throw)一个例外。运行时系统在方法的调用栈中查找,从生成例外的方法开始进行回朔,直到找到包含相应例外处理的方法为止,这一个过程称为捕获(catch)个例外。所以,java的例外处理使非常方便的。跨平台:Java语言的一个非常重要的特点就是与平台的无关性。而使用Java虚拟机是实现这一特点的关键。一般
13、的高级语言如果要在不同的平台上运行,至少需要编译成不同的目标代码。而引入Java语言虚拟机后Java语言在不同平台上运行时不需要重新编译。Java语言使用模式Java虚拟机屏蔽了与具体平台相关的信息,使得Java语言编译程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。Java虚拟机在执行字节码时,把字节码解释成具体平台上的机器指令执行。该系统设计的意义伴随着当今互联网迅速发展,网上通讯成为一种必不可少的通讯习惯,该系统的设计就是为了实现在互联网上的即时通讯,它是利用当今最为流行的java编程语言来实现即时通讯工具的雏形,同时在系统开发过程中所用的都是j
14、ava常用的技术或者难点,比如用java的swing怎么去做一个界面美观的应用程序、java的网络编程技术的原理与应用、以及如何根据J2EE规范去开发一个基于Jsp和Servlet的Web应用等关键技术。通过设计和开发该系统,使自己所学的理论知识得到实践应用,也对即时通讯软件的通讯原理有了比较深刻的认识,大大的提高了自己的动手能力和解决问题的能力,为今后工作打下坚实的基础。2相关理论及基础技术与开发平台即时通讯应用工作原理分析我们经常听到TCP/IP和UDP(用户数据报协议)这两个术语,它们都是建立在更低层的IP协议上的两种通讯传输协议。前者是以数据流的形式,将传输数据经分割、打包后,通过两台
15、机器之间建立起的虚电路,进行连续的、双向的、严格保证数据正确性的文件传输协议。而后者是以数据报的形式,对拆分后的数据的先后到达顺序不做要求的文件传输协议。QQ就是使用UDP协议进行发送和接收“消息”的。当你的机器安装了OICQ以后,实际上,你既是服务端(Server),又是客户端(Client)。当你登录OICQ时,你的OICQ作为Client连接到腾讯公司的主服务器上,当你“看谁在线”时,你的OICQ又一次作为Client从QQServer上读取在线网友名单。当你和你的OICQ伙伴进行聊天时,如果你和对方的连接比较稳定,你和他的聊天内容都是以UDP的形式,在计算机之间传送。如果你和对方的连接
16、不是很稳定,QQ服务器将为你们的聊天内容进行“中转”。其他的即时通信软件原理与此大同小异。OICQ的通讯原理:用户首先从QQ服务器上获取好友列表,以建立点对点的联系。用户(Clientl)和好友(Client2)之间采用UDP方式发送信息。如果无法直接点对点联系,则用服务器中转的方式完成。我们看到两个OICQ用户如果是在两个不同的内网上,它们经过登录后可以不同过服务器来直接通讯。那这是为什么呢。其根本原因是OICQ使用了UDP协议,这样用户之间的通讯自己完成就减少了服务器的负担。那么到底原理是什么样的,为什么TCP应用就不能达到这一要求。这就涉及到NAT(NetworkAddressTrans
17、lator)技术。NAT技术使得一个私有网络可以通过internet注册IP连接到外部世界,位于inside网络和outside网络中的NAT路由器在发送数据包之前,负责把内部IP翻译成外部合法地址。内部网络的主机不可能同时与外部网络通信,所以只有一部分内部地址需要翻译。NAT的翻译可以采取静态翻译和动态翻译两种。静态翻译将内部地址和外部地址一对一对应。当使用了动态翻译时就采用portmultiplexing技术,通过改变外出数据的源port技术可以将多个内部IP地址影射到同一个外部地址,这就是PAT(portaddresstranslator)。在这种情况下,一个TCP连接只能和固定的连接方
18、通讯,而UDP应用本身就可以接受不同数据来源的数据包,所以在NAT转换的时候能够完成两个客户端之间的通讯,从而达到了客户端直接通讯的目的。总的来说,OICQ的应用在客户端方面符合即时通讯系统的模型。客户端之间的通讯中,采用了UDP的通讯方式,当客户端之间无法直接通讯时,采用通过服务器转发的方式来实现即时信息的传送。所用技术JAVA多线程技术:多线程的各个线程看上去像是并行地独自完成各自的工作,就像一台一台计算机上运行着多个处理机一样。在多处理机计算机上实现多线程时,它们确实可以并行工作,而且采用适当的分时策略可以大大提高程序运行的效率。而作为接受客户端请求的服务器来说,必须使用多线程技术来接受
19、不同时刻的请求,接收一个处理一个,将其放入线程队列,然后继续监听其他的请求。网络通讯与Socket编程:java网络编程中有两种不同的通讯协议,分别是TCP(面向连接)与UDP(面向无连接),两种协议各有优缺点。TCP:是TranferControlProtocol的简称,是一种面向连接的保证可靠传输的协议。通过TCP协议传输,得到的是一个顺序的无差错的数据流。发送方和接收方的成对的两个socket之间必须建立连接,以便在TCP协议的基础上进行通信,当一个socket(通常都是serversocket)等待建立连接时,另一个socket可以要求进行连接,一旦这两个socket连接起来,它们就可
20、以进行双向数据传输,双方都可以进行发送或接收操作。UDP:是UserDatagramProtocol的简称,是一种无连接的协议,每个数据报都是一个独立的信息,包括完整的源地址或目的地址,它在网络上以任何可能的路径传往目的地,因此能否到达目的地,到达目的地的时间以及内容的正确性都是不能被保证的。JDBC数据库技术:JDBC,全称为JavaDataBaseConnectivitystandard,它是一个面向对象的应用程序接口(API),通过它可访问各类关系数据库JDBC也是java核心类库的一部分。JDBC的最大特点是它独立于具体的关系数据库。与ODBC(OpenDatabaseConnecti
21、vity)类似,JDBCAPI中定义了一些Java类分别用来表示与数据库的连接(connections),SQL语句(SQLstatements),结果集(resultsets)以及其它的数据库对象,使得Java程序能方便地与数据库交互并处理所得的结果。使用JDBC,所有Java程序(包括Javaapplications,applets和servlet)都能通过SQL语句或存储在数据库中的过程(storedprocedures)来存取数据库。SWING界面设计:java的扩展包,其中包括众多的控件以及丰富的控件操作功能,使用户可以简单的利用它画出应用程序的界面,结合JBuilder9.0带的绝
22、对定位类包,可以设计出非常好看的用户界面。JSP与SERVLET技术:JSP和SERVLET是在j2ee平台下开发WEB应用的基础,JSP是由SUN公司倡导众多公司参与一起建立的一个动态网页标准技术,JSP技术为建立具有动态生成内容的WEB应用提供了一种简便而且功能强大的途径,它可以快速开发出与平台无关的基于WEB的应用,JSP是更高级的SERVLET,在运行的时候JSP先被转化为SERVLET。UML:UML是一个统一建模语言,是当今世界上面向对象系统开发领域中的工具之一,它是一种可视化的建模语言,能够让系统构造者用标准的、易于理解的方式建立起能够表达出他们想像力的系统蓝图,并且提供了便于不
23、同的人之间有效地共享和交流设计结果的机制。它包含了9种图形还有其他一些特征,很方便用户进行建模。工具及开发平台BorlandJBuilder是全球第一的跨平台Java开发环境,可以用于构建符合工业标准的Java应用系统,不仅可以开发桌面级程序,并且可以开发EJB、Web、XML以及数据库等各类应用程序。双向、可视化设计工具使得我们可以快速的构建各种应用程序,并部署至多种应用程序服务器,利用JBuilder,我们可以快速、方便的构建出Java应用程序,并且其中提供了一个类似于VS.NET中的界面编辑器功能,它具有绝对的定位功能,我们不用再手工粗糙的排列JAVA的LayoutManager,这一切
24、完全可以用JBuilder开快速完成。Eclipse是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。幸运的是,Eclipse附带了一个标准的插件集,包括Java开发工具(JavaDevelopmentTools,JDT)。虽然大多数用户很乐于将Eclipse当作JavaIDE来使用,但Eclipse的目标不仅限于此。Eclipse还包括插件开发环境(Plug-inDevelopmentEnvironment,PDE),这个组件主要针对希望扩展Eclipse的软件开发人员,因为它允许他们构建与Eclipse环境无缝集成的工具
25、。更舒服的是,利用Eclipse中的MyEclipse插件来搭建一个动态JSP程序,快速,简单、方便。Rose一套非常有使用价值的系统建模工具,其中提供了非常方便的系统建模功能,比如用例图、行为图、活动图、时序图等。利用它可以加快系统设计开发效率,同时可以给用户和开发者提供清晰的图,使他们之间的交流变得更加的方便有效。SQLSERVER2000数据库是微软的功能强大的数据库管理系统,具备很多数据库管理常用的功能,例如存储过程、数据查询与更新等,是一个非常理想的后台数据库系统。Tomcat是Sun的JSWDK(JavaServerWebDevelopmentKit)中Servlet的运行环境(s
26、ervlet容器),是一个免费的开源的Serlvet容器,它是Apache基金会的Jakarta项目中的一个核心项目,由Apache,Sun和其它一些公司及个人共同开发而成。系统配置要求推荐配置如下:CPU2G以上,内存512以上,运行平台基于Windows平台。客户端需要安装java虚拟机,同时还要有JICQ的客户端程序。服务器端需要安装Sqlserver2000数据库,服务器端如果是windowsXP系统要打上Sqlserver2000的SP3或者SP4补丁包,同时服务器端需要安装Web服务器TOMCAT,还有JICQ的服务器端程序。3系统体系结构的设计需求描述伴随着当今互联网的迅速发展,
27、人们之间的信息交互的实时性能变得越来越重要,传统的电子邮件交互已经不能够满足人们的即时通讯要求,鉴于此种情况打算开发出一款类似于腾讯QQ的即时通讯软件,只要经过注册你便可以获取一个帐号,通过该帐号你可以在客户端登陆,成功登录后便可以在互联网上与你的亲朋好友进行畅谈,由于技术和时间问题,该软件主要提供私聊、群聊、好友管理、群管理等常用功能,其它一些功能比如文件传输、语音聊天和视频聊天等功能,由于技术问题暂时没有实现,可以在该系统的基础上实现这些功能,也可以在此基础上进行更多功能的扩展。系统架构设计该系统主要包括三层,客户端,服务器端,以及数据库服务器,客户端用来提供用户的登录,服务器端用来对登录
28、的用户进行管理以及用来处理信息之间的转发,数据库服务器主要存放一些重要的信息。它们之间的关系如下图所示:图1三层模型中间层又分成四个部分:图2中间层的构成本系统采用的设计模型为平时所说的C/S架构,Client/Server,系统总体模型图如下:JDBC-ODBC13.3Sock接受消息监听服务器查找好友图8登录用例图图9登录活动图户之间交互信息的时序图,主要包括从用户登录到通过验证然后下边服务器监听接受并校验搜索最新登陆图片返回我的离线信息与奸友资料,并向奸友发送我的上线登陆请求垣写JGQ与密码登陆请求下边的登录模块的活动图,主要是对用户提供的用户名和密码提供验证。进行信息的发送,给好友发送
29、信息包含两种情况,第一,如果好友在线的话消息直接通过服务器中转发送给好友,如果对应的好友不在线,则讲发送的信息保存到数据库中,当该好友上线的时候从数据库中读出相应的信息进行发送。图10用户信息交互图3.3.4用户间交互模块设计该模块主要实现已用户之间的信息交流,用户交流的前提是先要添加好友,可以通过查找功能进行好友的查找,找到要添加的好友后,通过发送好友申请消息来添加好友,当对方通过添加好友的验证消息后,便可以成功的添加好友只有成功的添加好友之后,才可以进行用户之间的信息的相互交互。下边是用户交互的用例图。图11用户交互用例图第12页共30页第 页共30页用户之间聊天的信息主要通过聊天服务器进
30、行中转,用户之间聊天内容主要存储在客户端的一些文件中,可以通过查看聊天功能来进行对这些聊天信息图12用户交互活动图下边是好友添加的时序图3.4.1数据库物理模型通过对系统需求的分析,在关系数据库中建立相应的表,并建立了表之间的相互关系,下边的图是在Sql2000下这些表之间的对应关系图。JLityJlddressTFc=ta.lcod.eJCronillLJICQJGroujIIJICQJ&rourlTamcJGroupsJ&rouiiIIJGrouiiJICQJGroujira.nieJ&r:-uBPicIIiJGroujTrjeJGroujEcastJ&rouiiInfoALoginTic
31、lorinPicIHlyinTicUiiniuFromlia.teJudateliiteAVJFicIDJICQSh.0TrIIiJlrmilTUnderWriteJObtionJIIiCirdTmeJ1J=ertc-hlieJUcerlliCird.JFrotectPTrd.Que=tioJlessagestessa.reII*7JICQFrii町I匚Qtessa“Hua.3tessa.reContentflatAHAncJTriends5:tncJICQ-Friena.mJICQJFrienaillJFriendTriiEIDJFriend.TrBeIIJFricndTyiieITheeJ
32、ICQ图14数据库物理模型数据字典下边是关系数据库中每个表所对应的字段的详细信息表1JUSERS(用户表)用来存放用户注册时的基本信息简称字段名类型长度允许空备注JICQ号码bigint8NotnullPKJPassWord密码varchar50NotnullJShowName昵称varchar100NotnullJTrueName真实名称varchar100JAge年龄Int4JSex性别char4JCountry国家varchar50JProvince省varchar50JCity市varchar50JStatus状态smallint2NotnullJUserIPIPvarchar50No
33、tnullJPicID图片IDint4NotnullJICQShowIDint4JEmail电子邮件varchar100JUnderWrite个人签名varchar500JProfession专业varchar50JStar星座varchar50JXuexing血型varchar50JGradute学历varchar50JAddress住址varchar200JPostalcode邮编char6JPersonalPage个人主页varchar500JOption个人爱好Int4JIDCardType证件类型char20JUserMoblie手机号码varchar11JUserIDCard用户卡
34、号varchar30JProtectPwdQuestion密保提问varchar50JProtectPwdAnswer密保答案varchar50表2Jmessages(消息表)用来存放用户发送的离线消息简称字段名类型长度允许空备注MessageID自增主键bigint8NotnullMyJICQ自己号bigint8NotnullFriendJICQ朋友号Bigint8NotnullMessageHead消息标题Varchar200Notnullflag消息状态smallintMessageContent消息内容varchar500Notnull表3JFriends(朋友表)用来存放用户的好友信
35、息简称字段名类型长度允许空备注JICQFriendID自增主键bigint8NotnullPKJICQ自己icq号bigint8NotnullJFriendID朋友icq号bigint8NotnullJFriendTypelD朋友类别int4NotnullFK表4JFriendType(朋友类别表)用来存放用户的好友组信息简称字段名类型长度允许空备注JFriendTypeID主键自增int4NotnullPKJFriendTypeName好友组名称varchar100NotnullJICQIcq号码bigint8Notnull表5JGroups(用户组表)用来存放用户的群组信息简称字段名类型长
36、度允许空备注JGroupID群号码int4NotnullPKJGroupJICQ群名称bigint8JGroupName群名称varchar100NotnullJGroupPicID群图片IDint4NotnullJGroupType群类别varchar100JGroupBcast群公告varchar500JGroupInfo群信息varchar500表6JGroupUsers(用户和组关联表)用户和组之间的关联表简称字段名类型长度允许空备注JGroupIDJICQ主键bigint8NotnullPKJGroupID组IDInt4NotnullFKJICQIcq号码bigint8Notnull
37、FKJGroupName群名称varchar200NotnullJMessageStatus群消息状态smallint2Notnull4系统实现4.1网络通讯编码实现4.1.1聊天客户端部分代码下边是聊天客户端的核心代码,它用来判定消息的来源以及针对该消息所进行的相应的操作。for(inti=0;iMyPersonTree.alist.size();i+)/判断是哪个好友发来的信息p=(Person)MyPersonTree.alist.get(i);if(p.getID().equals(hisJICQ)break;elsep=null;if(p!=null)/队列中有该好友JICQChat
38、FramejchatExist=null;第l7页共30页intisExistFrame=O;判定聊天窗口是否已经打开for(inti=0;iMyPersonTree.vector.size();i+)/遍历向量jchatExist=(JICQChatFrame)MyPersonTree.vector.get(i);if(jchatExist.JICQ.equals(hisJICQ)isExistFrame=l;聊天窗口已经打开break;if(isExistFrame=O)聊天窗口没有打开,新建一个窗口JICQChatFramejchat=newJICQChatFrame(p,this);M
39、yPersonTree.vector.addElement(jchat);jchat.setMessage(headmsg,msg);else/在聊天窗口中显示该信息jchatExist.setMessage(headmsg,msg);elseJICQChatFramejchatExist=null;intisExistFrame=0;for(inti=0;iMyPersonTree.UnKonwVector.size();i+)/陌生人的信息jchatExist=(JICQChatFrame)MyPersonTree.UnKonwVector.get(i);if(jchatExist.JIC
40、Q.equals(hisJICQ)isExistFrame=l;break;4.1.2服务器端监听与转发消息代码下边是服务器端的监听程序,如果发现有socket连接,就创建一个与该连接所对应的一个线程,该线程主要用来处理用户之间的信息交互。publicvoidrun()try第 页共30页while(true)/始终监听状态Socketclient=listen.accept();/创建用户线程PersonThreadf=newPersonThread(client);f.setPriority(Thread.MIN_PRIORITY);f.start();Catch(IOExceptione
41、)System.err.println(Erro:+e);System.exit(1);/服务器端的消息转发函数publicstaticvoidbroadcast(Stringmsg,StringhisJICQ)inti;PersonThreadyou;for(i=0;iconnections.size();i+)you=(PersonThread)chatserverthree.connections.elementAt(i);if(you.JICQ.equals(hisJICQ)you.send(msg);服务端单线程上线处理代码下边是服务器端上的单线程的处理代码,主要通过网络流来读取客户
42、端发送的消息,然后将消息分解,用来区分消息的类型,譬如是群消息还是个人消息等。While(true)line=in.readUTF();System.out.println(line);/将读取的信息按照特定格式进行拆分StringTokenizerstk=newStringTokenizer(line,#);/PEOPLE+#+JICQif(stk.hasMoreElements()key=(String)stk.nextElement();/用户上线提示if(key.equals(PEOPLE)tryStringJNUM=(String)stk.nextElement();this.JIC
43、Q=JNUM;for(inti=0;ichatserverthree.connections.size();i+)PersonThreadtt=(PersonThread)chatserverthree.connections.get(i);if(tt.JICQ.equals(this.JICQ)chatserverthree.broadcast(RELOG#YES,tt.JICQ)chatserverthree.connections.remove(i);tt.stopThread();break;/将该线程加入到线程向量中chatserverthree.connections.addEle
44、ment(this);Friendsf=newFriends();ResultSetrs=f.selectAddMePerson(JNUM);ArrayListflist=newArrayList(50);while(rs.next()flist.add(rs.getString(1);for(inti=0;ichatserverthree.connections.size();i+)PersonThreadpt=(PersonThread)(chatserverthree.connections.elementAt(i);if(flist.contains(String)pt.JICQ)ch
45、atserverthree.broadcast(line,pt.JICQ);s_MyDetailssMy=news_MyDetails();/从信息表中读取离线信息,然后将之删除ResultSetrsMessage=sMy.isHaveMessage(JNUM);if(rsMessage!=null)while(rsMessage.next()intFriendJICQ=rsMessage.getInt(FriendJICQ);intMyJICQ=rsMessage.getInt(MyJICQ);StringmsgHead=rsMessage.getString(MessageHead);St
46、ringmsgBody=rsMessage.getString(MessageContent);intflag=rsMessage.getInt(flag);StringAllmsg=;if(flag=1)Allmsg=MSGONE#+FriendJICQ+#+MyJICQ+#+msgHead+#+msgBody;elseAllmsg=ADDFRIEND#+FriendJICQ+#+MyJICQ+#+msgHead+#+msgBody;chatserverthree.broadcast(Allmsg,JNUM);sMy.delOldMessage(JNUM);系统运行的效果图4.2.1登录界面
47、该界面提供用户输入自己注册号码和相应的密码,然后登录系统,如果还没有注册帐号,可以点“申请”进行帐号的申请。如下图所示:图15登录界面主界面登录成功后的主界面,主要是一些好友的信息,以及一些好友分组的信息在此界面上可以进行好友的添加、查找、删除,以及好友组的添加、删除,同时还可以查看最近联系人等功能。4.2.3群聊天界面如果你已经成功的加入该群,你就可以在群中和其他群成员进行一些信息的交互。好友聊天界面该界面主要是用户聊天的主要界面,主要提供了发送和接受聊天信息功能,以及查看聊天记录,同时还可以查看好友的一些基本信息。对方形象范IP:版本-:4.2.5好友查找界面好友添加和查找的界面,你可以根
48、据不同的条进行好友查找的师选比如只查找在线的用户或者可以查看所冇用户,还可以根据一些信息讲查找乂满足自己的查找需要。注册模块的实现4.3.1数据库连接JDBC数据库连接的核心代码,IP地址设定为本机的IP:Connectionconn=null;Statementst=null;try/加载驱动程序Class.forName(com.microsoft.jdbc.sqlserver.SQLServerDriver);/创建数据库的连接Conn=DriverManager.getConnection(jdbc:sqlserver:/;databaseName=JICQ,sa,sa);字符编码过滤
49、器的核心代码该过滤器实现Servlet的过滤器接口,设置字符编码为GB2312,主要用来解决在表单提交工程中所出现的中文乱码问题,主要用来解决以post方式提交的表单所出现的中文乱码问题。publicclassCharacterEncodingFilterimplementsFilterprotectedFilterConfigfilterConfig;protectedStringencoding=null;protectedbooleanignore=true;/初始化字符过滤器publicvoidinit(FilterConfigfilterconfig)throwsServletExc
50、eptionthis.filterConfig=filterconfig;/设定编码方式,从web.xml配置文件中获取该参数this.encoding=filterconfig.getInitParameter(encoding);Stringvalue=filterconfig.getInitParameter(ignore);if(value=null)this.ignore=true;elseif(value.equalsIgnoreCase(true)this.ignore=true;elseif(value.equalsIgnoreCase(yes)this.ignore=true
51、;elsethis.ignore=false;/重写Filter的过滤方法publicvoiddoFilter(ServletRequestrequest,ServletResponseresponse,FilterChainchain)throwsIOException,ServletExceptionif(ignore|request.getCharacterEncoding()=null)Stringencoding=this.selectEncoding(request);if(encoding!=null)System.out.println(encoding+encoding);r
52、equest.setCharacterEncoding(encoding);chain.doFilter(request,response);/销毁该字符过滤器publicvoiddestroy()this.encoding=null;this.filterConfig=null;protectedStringselectEncoding(ServletRequestservletrequest)return(this.encoding);注册模块运行效果图4.4.1主页面以下的主页面,在该页面你可以注册新的帐号、密码的找回等功能。图20注册模块主页面注册页面主要是进行一些用户注册基本信息的填写。在系统的开发过程中,遇到了很多的技术难点。难点之一,在注册模块遇到数据库连接不成功的问题,通过请教老师,成功解决问题。原因是如果是在windows平台下用JDBC连接数据库,就会出现这种情况。解决的方法是下载sqlserver2000的sp3补丁包,如果没有打该补丁包,就会出现连接数据库不成公的问题。难点之二,Tomcat下的中文乱码的解
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 安全防范工程施工高级工程师考试试卷及答案
- 快手磁力金牛营销师(中级)认证考试题库(附答案)
- 乡土中国阅读解析
- T∕AOPA 0108-2026 动力提升航空器驾驶员附加训练规范
- 专题二、力与曲线运动阶段检测卷(提升学生版)
- 2026届甘肃省会宁县第四中学高三第3次联考化学试题含解析
- 2026年四川省泸州市泸县一中高三下学期期中练习化学试题理试卷含解析
- 餐厅合伙人合同
- 26年鼻咽癌靶向药机制深挖
- 2025~2026学年河北省石家庄市第四十中学八年级上学期英语期末试卷
- 雨课堂学堂云在线《焊接结构(西安石大 )》单元测试考核答案
- 万用表原理及使用方法
- 5年(2021-2025)重庆中考物理真题分类汇编:专题24 力学实验(二)(解析版)
- 抵制和防范宗教向校园渗透
- 14.超声刀使用及维护中国医学装备协会团体标准TCAME19-2020
- GB/T 222-2025钢及合金成品化学成分允许偏差
- 眼科手术分级详细目录
- 幼儿园大班数学《玩具店开张》课件
- 煤矿掘进工安全培训内容课件
- 2025四川阿坝州若尔盖县下半年省内外教师业务水平达标考调中小学教师11人考试参考试题及答案解析
- 基于PLC的采煤机监控系统设计
评论
0/150
提交评论