即时通讯系统的设计与实现

发布时间:2014-03-11 12:27:38   来源:文档文库   
字号:

1 引言

自第一代计算机诞生,计算机技术伴随着全球的经济一直处于高速发展的阶段。近年来更是如此,随着电脑和互联网的普及,尤其是移动互联网的发展,铺天盖地的软件如一阵海啸席卷而来,这也标志着以“联网、易用、时尚"为特征的后PC时代的到来,计算机的发展离不开网络这一方向,网络将大大扩展计算机的功能,研究计算机的网络方面的技术以及应用,挖掘计算机的额网络潜能,将能够大大提高自己对计算机的本身的认识,同时也能加深对计算机网络的认识。传统的人与人之间的联系有了新的表现形式,由于人们利用电脑和互联网的时间越来越多,其中以“交流(Exchange)”、“资讯(Information)”、“电子商务(E-commerce)”为主要特征的网络即时通信IM(Instant Messenger)扮演了重要的角色,最大程度的体现了网络给人们生活带来的变化,网赚,在家兼职,日结,qq2302593470

它使得人们的沟通更加方便、快捷,使人们真正有了天涯若比邻的“地球村"的感觉。

1.1 课题的研究背景

随着移动互联网的发展,互联网即时通信也在向移动化扩张 。网络即时通信是一种在后PC时代兴起的,以Internet网络及其他有线、无线网络为基础的,在交互双方之间实时地传送语音、文字、图像等信息的通信方式。目前,微软AOLYahooUcSTAR等重要即时通信提供商都提供通过手机接入互联网即时通信的业务,用户可以通过手机与其他已经安装了相应客户端软件的手机或电脑收发消息。产品最早的创始人是三个以色列青年,是他们在1996年做出来的,取名叫ICQ。它能够利用贺卡语音邮件ICQ插件发送贺卡和语音邮件,利用ICQ Email发送、转寄和复制电子邮件,等等。ICQ一经上市,迅速取得了广阔的市场,由于前景一片光明,ICQ的安装垃圾和所传病毒较少,因此基本上属于绿色软件,而且ICQ号码是完全免费的,注册申请也随时被接受,这是非常难能可贵的。目前ICQ1亿多用户,主要市场在美洲和欧洲,已成为世界上最大的即时通信系统ICQ,作为IM软件领域的缔造者,不得不说它成就了一个辉煌 。紧跟着同类软件迅速的跟进,因为其本身的技术并不复杂,所以很快几乎每一个国家都推出本土的IM软件,抢夺了市场。如今的IM市场,形式大变,早已不是当年的模样,现在国内的即时通信工具按照使用对象分为两类:一类是个人IM,如:QQ百度hi网易泡泡盛大圈圈淘宝旺旺等等。以国内的腾讯QQ软件为例:腾讯QQ脱胎于腾讯OICQ,而OICQ就是国内最早出现的即时通信软件之一,软件最初的设计完全仿照ICQ,从内容、形式等方面完全照搬,目前几乎接近垄断中国在线即时通讯软件市场。

1.1 课题的研究意义

2004年来,即时通信成为互联网和电信行业最激动人心的话题。由于即时通信软件的兴起,能够进行即时互通的内容正迅速由语音全面扩展到图像、文字、数据等方面,不过多功能还不是即时通信的全部内涵,能够跨越互联网、手机、固定电话等多个平台进行通信才是即时通信未来的价值所在。即时通信已经跨越原来狭义上的网络概念,正向更为广义的方向发展,未来的即时通信软件可以随时随地和任何人进行任何方式的沟通,不仅是语音,还包括图像、资料、数据等等,不仅在电脑上,还可以在手机、固定电话等任何终端上。 虽然目前绝大多数互联网用户都同时是即时通信用户,但是,随着互联网尤其是宽带用户数的迅速增长,未来若干年内,中国即时通讯用户数量还会猛增。在此之间,Internet成为了一个至关重要的因素,于是在没有互联网的情况下及在局域网中如何使用即时通信,也成为了亟待解决的问题。在技术上,即时通信软件之间互联互通的技术操作难度并不高,软件之间实现兼容、实现互联互通完全可以做到

1.3 课题的研究内容

本课题主要了研究了在局域网中人们通过即时通讯软件进行沟通交流。其中还包括用户的注册功能,登录功能,添加头像的功能,注册成功后随机得到账号,添加好友的功能。在服务器端,在启动服务器之后滚动条将滚动,在服务器端带有系统配置功能,用户管理的功能,在线用户统计的功能,查询用户的功能,查看日志的功能,广播系统消息的功能。

2 工具介绍

本系统使用应用较为广泛的JavaBean模式进行代码的编写,JavaBean 是一种JAVA语言写成的可重用组件。为写成JavaBean,类必须是具体的和公共的,并且具有无参数构造器JavaBean 通过提供符合一致性设计模式的公共方法将内部域暴露成员属性。 运用JavaSwing构造程序的界面,各种组件构成我们想要的界面。运用Socket套接字完成服务端与客户端之间的通信操作。

2.1 Socket的介绍

所谓socket通常也称作"套接字",应用程序通常通过"套接字"向网络发出请求或者应答网络请求。以J2SDK-1.3为例,SocketServerSocket类库位于java .net包中。ServerSocket用于服务器端,Socket是建立网络连接时使用的。在连接成功时,应用程序两端都会产生一个Socket实例,操作这个实例,完成所需的会话。对于一个网络连接来说,套接字是平等的,并没有差别,不因为在服务器端或在客户端而产生不同级别。不管是Socket还是ServerSocket它们的工作都是通过SocketImpl类及其子类完成的。

21.1 Socket原理

在服务器端程序中,Socket首先通过socket函数建立服务器端的socket,并通过bind设置socket所使用的服务器端IP地址及通信端口。带服务器端socket建立之后,则通过侦听表示服务器端应用程序开始侦听客户端的连接。当收到来自客户端的连接请求时,便通过accept建立与客户端的连接。建立服务器Socket应用程序步骤如下:1.建立服务器端的Socket,并且以此侦听来自客户端的连接请求。2.当服务器段侦测到来自客户端的连接请求时,则接收此请求并建立客户端的Socket,该Socket将作为客户端连接及后续处理发送及接收数据的依据,至此则完成服务器与客户端的Socket通信连接,3.处理根据客户端的信息,一般称为请求,可视为客户端的指令需求。例如HTTP通信协议的URL请求,或FTP通信协议的FTP命令(getput)等。4.根据客户端传来的请求,服务器端需经过程序逻辑处理之后,发送回相对应的执行结果或错误信息至客户端,例如HTTP服务器须发送回HTML网页内容,而FTP服务器则发送回FTP指令的结果。5.当程序完成数据或命令的处理之后,便关闭Socket通信链接。在传递数据上,服务器与客户端之间可通过readrecvsendwrite进行数据的接收和发送。当连接中断时,程序利用closesocket关闭Socket并释放系统资源。

2.1.2 分析Socket在客户端的开发流程

客户端Socket应用程序与服务器端Socket应用程序的流程很相似,最大的差别在于:

1.服务器端Socket应用程序主要用于侦听及接收客户端的连接,而客户端Socket应用程序则用于尝试与服务器端建立连接。

2.客户端Socket应用程序发送信息指令至服务器端,并接收服务器端所返回的结果;而服务器端Socket应用程序则处理指令逻辑,并将结果或错误信息发送至客户端。

客户端应用程序首先通过socket函数建立客户端的socket,其主要目的是与指令的服务器端(指定主机的IP地址及通信端口号)建立连接,此操作由connect来完成。当服务器端收到connect的连接请求时,则由服务器端的accept建立此连接。建立客户端Socket应用程序的步骤大致如下:

1.客户端的Socket,在建立时需指定欲连接服务器端的主机名称(IP地址)Internet服务的通信端口。

2.特定信息或指令至服务器端。

3.服务器端返回的执行结果或错误信息,并以特定格式显示。例如HTTP通信协议会通过HTML内容显示。

4.客户端不需要服务器端的处理时,便关闭Socket通信连接。在数据传递上,可利用readrecvsendwrite接收及发送数据。最后并通过closesocket关闭Socket连接。

22 TCP协议

TCP/IP(Transmission Control Protocol/Internet Protocol) 即传输控制协议/网间协议,是一个工业标准的协议集,它是为广域网WAN)设计的

2.2.1 TCP的相关介绍

TCPTransmission Control Protocol 传输控制协议TCP是一种面向连接(连接导向)的、可靠的、基于字节流的运输层(Transport layer)通信协议,由IETFRFC 793说明(specified)。在简化的计算机网络OSI模型中,它完成第四层传输层所指定的功能,UDP是同一层内另一个重要的传输协议 。有时我们将TCP/IP描述为互联网协议"InternetProtocolSuite",TCPIP是其中的两个协议(后面将会介绍)。由于TCPIP是大家熟悉的协议,以至于用TCP/IPIP/TCP这个词代替了整个协议集。这尽管有点奇怪,但没有必要去争论这个习惯。例如,有时我们讨论NFS是基于TCP/IP时,尽管它根本没用到TCP(只用到IP和另一种交互式协议UDP,而不是TCP)。

2.2.2 TCP的作用

因特网协议族(Internet protocol suite)四层协议中,TCP层是位于IP层之上,应用层之下的传输层。不同主机的应用层之间经常需要可靠的、像管道一样的连接,但是IP层不提供这样的流机制,而是提供不可靠的包交换。应用层向TCP层发送用于网间传输的、用8位字节表示的数据流,然后TCP把数据流分割成适当长度的报文段(通常受该计算机连接的网络的数据链路层的最大传送单元(MTU)的限制)。之后TCP把结果包传给IP层,由它来通过网络将包传送给接收端实体的TCP层。TCP为了保证不发生丢包,就给每个字节一个序号,同时序号也保证了传送到接收端实体的包的按序接收。然后接收端实体对已成功收到的字节发回一个相应的确认(ACK);如果发送端实体在合理的往返时延(RTT)内未收到确认,那么对应的数据(假设丢失了)将会被重传。TCP用一个校验和函数来检验数据是否有错误;在发送和接收时都要计算和校验。

首先,TCP建立连接之后,通信双方都同时可以进行数据的传输,其次,它是全双工的;在保证可靠性上,采用超时重传和捎带确认机制。在流量控制上,采用滑动窗口协议,协议中规定,对于窗口内未经确认的分组需要重传。在拥塞控制上,采用广受好评的TCP拥塞控制算法(也称AIMD算法),该算法主要包括三个主要部分:1,加性增、乘性减;2,慢启动;3,对超时事件做出反应。

2.2.3 TCP的服务流程

TCP协议提供的是可靠的、面向连接的传输控制协议,即在传输数据前要先建立逻辑连接,然后再传输数据,最后释放连接3个过程。TCP提供端到端、全双工通信;采用字节流方式,如果字节流太长,将其分段;提供紧急数据传送功能。尽管TCPUDP都使用相同的网络层(IP),TCP却向应用层提供与UDP完全不同的服务。

TCP提供一种面向连接的、可靠的字节流服务。面向连接意味着两个使用TCP的应用(通常是一个客户和一个服务器)在彼此交换数据之前必须先建立一个TCP连接。这一过程与打电话很相似,先拨号振铃,等待对方摘机说,然后才说明是谁。在一个TCP连接中,仅有两方进行彼此通信。广播和多播不能用于TCP

TCP通过下列方式来提供可靠性:

1.应用数据被分割成TCP认为最适合发送的数据块。这和UDP完全不同,应用程序产生的数据报长度将保持不变。由TCP传递给IP的信息单位称为报文段或段(segmentTCP如何确定报文段的长度。网赚,在家兼职,日结,qq2302593470

2.当TCP发出一个段后,它启动一个定时器,等待目的端确认收到这个报文段。如果不能及时收到一个确认,将重发这个报文段。当TCP收到发自TCP连接另一端的数据,它将发送一个确认。这个确认不是立即发送,通常将推迟几分之一秒

3TCP将保持它首部和数据的检验和。这是一个端到端的检验和,目的是检测数据在传输过程中的任何变化。如果收到段的检验和有差错,TCP将丢弃这个报文段和不确认收到此报文段(希望发端超时并重发)。

4.既然TCP报文段作为IP数据报来传输,而IP数据报的到达可能会失序,因此TCP报文段的到达也可能会失序。如果必要,TCP将对收到的数据进行重新排序,将收到的数据以正确的顺序交给应用层。

5.既然IP数据报会发生重复,TCP的接收端必须丢弃重复的数据。

6TCP还能提供流量控制。TCP连接的每一方都有固定大小的缓冲空间。TCP的接收端只允许另一端发送接收端缓冲区所能接纳的数据。这将防止较快主机致使较慢主机的缓冲区溢出。

两个应用程序通过TCP连接交换8bit字节构成的字节流。TCP不在字节流中插入记录标识符。我们将这称为字节流服务(bytestreamservice)。如果一方的应用程序先传10字节,又传20字节,再传50字节,连接的另一方将无法了解发方每次发送了多少字节。收方可以分4次接收这80个字节,每次接收20字节。一端将字节流放到TCP连接上,同样的字节流将出现在TCP连接的另一端。

另外,TCP对字节流的内容不作任何解释。TCP不知道传输的数据字节流是二进制数据,还是ASCⅡ字符、EBCDIC字符或者其他类型数据。对字节流的解释由TCP连接双方的应用层解释。

这种对字节流的处理方式与Unix操作系统对文件的处理方式很相似。Unix的内核对一个应用读或写的内容不作任何解释,而是交给应用程序处理。对Unix的内核来说,它无法区分一个二进制文件与一个文本文件。

TCP是因特网中的传输层协议,使用三次握手协议建立连接。当主动方发出SYN连接请求后,等待对方回答SYNACK。这种建立连接的方法可以防止产生错误的连接,TCP使用的流量控制协议是可变大小的滑动窗口协议。第一次握手:建立连接时,客户端发送SYN包(SEQ=x)到服务器,并进入SYN_SEND状态,等待服务器确认。第二次握手:服务器收到SYN包,必须确认客户的SYN(ACK=x+1),同时自己也送一个SYN包(SEQ=y),即SYN+ACK包,此时服务器进入SYN_RECV状态。第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ACK=y+1),此包发送完毕,客户端和服务器进入Established状态,完成三次握手。如图2.1所示为TCP建立连接时进行的三次握手:

2.1 TCP建立连接时进行的三次握手

23 MyEclipse

MyEclipse,是一个十分优秀的用于开发Java, J2EEEclipse插件集合,MyEclipse的功能非常强大,支持也十分广泛,尤其是对各种开源产品的支持十分不错。

工作时间根据自己时间而定,我们从早上8—23都有任务,随时在YY上发布,您随时可以来拍单子。另还可以在平台里学做接待,培训,主持来赚钱。工资当天结算!为淘宝卖家服务,流程这样:接任务→按要求拍下宝贝→付款→收佣金(每单佣金1-30元不等,一单花费5-10分钟



3.最重要的一点,有过淘宝购物经验(我们这还有培训老师帮你培训)和使用YY语音。

1.会网上购物。

2.YY语音(和QQ差不多,下载一个就行,不会的话也没关系,成为会员后有专人培训)

3.多劳多得

4.工作时间自己决定。没有限制,在线越久赚的越多

5.工作地点没有限制,在家就能工作,有电脑就可以。我们是在YY语音平台上工作。所以说非常正规。口说无凭,有兴趣的亲们来我们的YY频道详细了解。

修改昵称的格式为:双鱼小麦邀请**(进入频道的凭证)

如:双鱼小麦邀请小马,双鱼小麦邀请瑶瑶

在好友设置中拒绝任何人添加(很重要)

YY频道:268193

有意向者可联系QQ2302593470

2.3.1 MyEclipse的介绍

MyEclipse是由Genuitec公司开发的一款功能强大的Java EE集成开发环境,包括完备的编码、调试、测试、和发布功能,完整支持JSPStruts2JSFHibernateSpringCSSJavaScriptHTMLSQL等技术。MyEclipse企业级工作平台My Eclipse Enterprise Workbench,简称MyEclipse是对EclipseIDE的扩展,利用它可以在数据库和J2EE的开发、发布,以及应用程序服务器的整合方面极大的提高工作效率。[1]

MyEclipse 是一个十分优秀的用于开发Java, J2EE Eclipse 插件集合,MyEclipse的功能非常强大,支持也十分广泛,尤其是对各种开源产品的支持十分不错。MyEclipse目前支持Java Servlet,AJAX, JSP, JSF, Struts,Spring, Hibernate,EJB3,JDBC数据库链接工具等多项功能。可以说MyEclipse几乎囊括了目前所有主流开源产品的专属eclipse开发工具 [1,8]

3 需求分析

本章主要介绍系统开发的基本情况,技术方面、经济方面、系统操作层面、软件质量方面的可行性。

3.1 开发系统的基本情况介绍

本系统针对局域网进行联机聊天。聊天室主要分为服务器端和客户端两部分,服务器端程序主要负责监听用户上线侦听客户端发来的信息,客户端需要登陆到服务器端才可以实现正常的聊天功能。本系统主要实现如下功能:

服务器:

启动服务器。

在特定端口上进行侦听,等待客户端连接。

系统配置中,用户可以进行服务器的配置。

可像在线用户发送系统信息。

可对用户进行管理,如删除用户。

统计在线人的信息。

日志管理,查看日志功能。

当停止服务时,断开所有的用户连接。

系统运行稳定、安全可靠

一台主机只能启动一个服务器。

客户端:

连接到已经开启聊天服务的服务器端。

用户注册。

用户登录。

用户可以选择聊天时的表情。

用户状态的更改

当服务器端开启后,用户可以随时登录和注销。

用户可以向自己的好友发送消息。

系统运行稳定、安全可靠

可以默认连接到自己主机启动的服务器。

系统的可行性研究也是项目成果与否的关键性因素,这里对即时通讯系统从以下接个方面进行可行性研究评估:

a)技术方面的可行性:综合各种计算机高级语言的特性和适应范围,最终决定选择纯面向对象的 Java 语言来完成我的毕业设计,近几年来,Java的魅力已经扩展到了各个应用角落,说它是目前最热门的程序语言一点也不为过,Java本身一互联网为发展方向,正好符合目前网络蓬勃发展的环境,加上各种功能配件推成出新,能够迅速符合产品发展的需求,JAVA所带来的影响力是难以评估的,利用JAVA来开发系统软件,将可以达到跨平台、易整合的特性。在学校的网络比较方面,给我们解决问题提供了方便。而且,凭借借阅图书馆收藏图书更增加了我们解决技术问题的信心。所以技术上完全可行。

b)经济层面的可行性研究:众所都知,SUN公司开启了开源的先河,而且开源也使SUN公司受益匪浅,可以说是这个策略造就今天JAVA繁荣兴旺的局面。在JAVA的世界里,开源组织与非盈利机构发挥到了极致StrutsSpringHibernateJBossEclipseTomcat等等优秀的开源框架都得到了广大用户的承认,在JAVA领域里的作用发挥的淋漓尽致。因此,便宜无好货绝对不成立,这些工具拥有足以和商业软件媲美的质量,很多商业IDE还集成了这些工具。“开源,不仅仅是 Java 语言,还包括开发工具和框架,相对廉价的开发成本”。这就使得个人使用 Java 作为开发平台成为可能。经过分析,在开源的框架里面无论针对那层,都有非常强大的框架支持。所以经济方面肯定没有阻碍。

c)系统操作层面的可行性:访问应用系统的方式主要有两种:通讯、注册。目前设备资源的利用状况以及可操作性,只需少量提供对数据库中的表进行直接操作就可以让该系统完整、稳定的运行下去,不会造成系统访问的巨大压力。

d)软件质量方面的可行性:有些应用对实时性要求很高,如果软件运行慢如蜗牛,即便功能完备也毫无实用价值。有些高风险的应用对软件的正确性与精确性要求极高,如果软件出了差错而造成用户利益损失,那么软件开发在某种意义上说也就失败了。

鉴于此,我们在编码测试的时候,找专业老师做为技术支持。并且在完成之后,实际验证可行性,同时要考虑到机器硬件设备的不同而给软件带来的不可预知的结果,所以在机房的不同电脑上运行软件达到测试目的。

通过以上的分析可以得出该系统在采用的技术是完全可以达到预期目的。

3.2 数据需求

需求分析是进行数据库系统设计的第一步也是相当重要的一步,同时是系统成败决定性的一步。对于求职招聘系统网站建设也不例外。需求分析阶段主要研究的对象是软件用户层面的需求,软件开发的目的就是为了满足客户的需要,因而,客户的需求是否合理正确成了项目最终成败的关键。如果不清楚系统要实现那些程序功能,又或者不清楚客户所需要的功能有那些,那么系统设计将会失去方向。需求分析的目的就是描述功能网站的需求,其根本目的就是在开发者和系统需求用户之间建立一种良好的理解和沟通的机制。

该系统主要包含两个用例,即客户端和服务器端。首先对系统进行功能性分解,分离出系统需要的实体类,然后对实体类进行属性和方法的定义。然后着手数据库中数据表的设计,这样有利于提高工作效率。数据分析不是简单的任务,它需要设计者进行全面的思考。最后在完成数据需求分析后就可以进行数据库的详细设计。

33 功能需求

系统要实现的即时通信系统是一个简单、方便的通信系统,用户通过网上进行交互。此即时通信系统要可以方便用户之间进行交流,信息即时发送,即时回复。这里的信息可以是文字,图像,视频和文件。一个完整的即时通讯系统需要能够进行用户之间的通讯。在服务器端的功能有,服务器的启动,服务器的配置,用户管理,监听用户上线并设置提醒,在线用户的管理,系统日志的功能。在客户端的功能有,用户注册,用户头像的选择,用户登录,用户状态的选择,添加在线好友的功能,与好友进行通信的功能,通信时表情的选择。用户接受系统消息的功能。

在腾讯QQ中,是以多服务器提供服务、服务器总控客户端、客户端之间UDP直连通信的。并且在两个客户端之间不能建立直连的情况下,才由服务器进行中转通信。与腾讯QQ不同,微软的MSN Messenger只使用了TCP作为传输层通信协议,所有客户端与服务器进行连接,然后通过与服务器的TCP连接进行中转通信。

该系统实现的是局域网中的聊天功能,运行服务程序后,服务器创建成功,然后使服务器对某一个设定的端口处于监听状态,当有客户端请求建立连接时,服务器就可接受请求,建立连接!这样服务器和客户端就可相互发送消息,实现聊天功能!如图3.1为本系统的功能模型图:

3.1 系统功能模型图

各功能模块需要实现的功能为:

服务器:

端口设置:设置监听的端口号,默认为3608

启动服务:启动服务端,滚动条开始滚动,监听登陆到服务器的JQ号。

系统消息:服务器可发送系统消息。

停止服务:停止服务器,中断与所有客户端的连接。

退出:关闭服务器端。

客户端:

用户设置:用户登陆,选择状态,勾选是否自动登陆。

连接设置:设置要连接的服务器所在主机的IP地址和监听端口。

登录:连接服务器。

好友设置:添加在线的用户为好友,发送消息给好友。

注销:与服务器断开连接。

退出:关闭客户端。

3.4 性能需求

1)磁盘容量要求

本系统属于C/S模式构架,因此存储容量较小,数据库系统也不是很大,系统文件所占用磁盘空间不是很大,数据库文件占用空间也不是很大。在用户注册模块,采用的是B/S模式,然而此功能模块占用内存也极少,不会给电脑造成负担。由功能需求可知,该应用软件主要是用于用户信息的传输和文件的传输。也就离不开要用到TCP,TCP 协议是面向连接的协议,而通过对传输数据的每一个字节统一编号、接收端确认、发送端超时重传、流量控制、拥塞控制等措施来保证所传输数据的可靠性。在主模块中的所构建的服务器端与客户端中没有大型的视频传输与下载所以也不会占用很大的空间。而对于用户之间的聊天记录,这些事属于文本类,不会占据大的空间,用户可以放心使用。

2)安全性要求

本系统在一台主机上只允许有一个服务器端,对用户的上下线管理更安全,不会出现紊乱现象。用户在进行私聊时,其它用户对聊天记录不可见,这样就保护了用户之间的隐私。在注册用户时,用户的邮箱是唯一性的,这样就保证了一个邮箱一个账户,保证了用户的唯一性,不会出现一个昵称多个密码的情况,也杜绝了盗用用户的情况。并且,本次注册中讲用户的密码是通过MD5算法进行加密后放入数据库中的,杜绝了一些黑客破开数据库盗取密码的可能,更加保护了用户账户的安全本系统必须进行登陆才可以访问操作。这样就使系统的安全性提高了很多。

3)适应性要求:

要求界面友好,菜单清楚,用户注册网站的整体的布局比较清楚,使用起来比较方便,各个行业的用户都能很快熟悉注册功能的用法,当用户出现错误填写时会及时弹出纠正信息,不会给用户错误的引导,保证用户正确顺利的完成注册,拥有良好的用户体验。对于用户发送的聊天信息,达到即发送即所见的效果,不会出现延时现象。服务器端也能及时的处理用户上线下线。

4 系统概要设计

4.1 系统框架

本节主要介绍用户登录、用户注册、用户状态,用户是否自动登陆,用户所在的端口号,用户头像的选择,添加好友。服务器开启,滚动条滚动,服务器监听,系统配置,用户管理,在线用户管理,用户查询,日志管理,查看日志。

4.2.1 总体设计

本系统设计遵循结构化设计原则有如下3条。

1) 采用模块化设计使得代码高内聚低耦合

2) 采用了自顶向下的方式设计,先完成框架,在进行内部小型子模块的完善

3) 逐步求精,对一些逻辑较为复杂的数据暂缓实现,由易到难逐步进行实现。

.2.2 系统逻辑处理

本项目的主要开发内容是设计并实现基于Java的文本聊天工具,主要分为三大模块:页面设计模块,后台通讯模块和数据访问模块。采用三层结构设计模式,运用JavaSwing编写所需要的图形界面,将系统用到的数据通过JavaI/O流写入文本,用文本方式存储。而系统后台的相对复杂的业务逻辑主要通过Java Bean 组件(Component)去实现,。

4..3 系统模块

系统主要分为三大模块,用户注册模块,服务器端,客户端。

主要功能框架如下图:

服务器包含服务、帮助、聊天三大模块,其中服务模块包含端口设置、启动服务、停止服务和退出四个小模块,聊天模块可以向聊天室内所有人或个人发送系统消息或以管理员身份与其他人聊天。

序号

模块名

基本功能

1

端口设置

设置倾听的端口号,默认为8888

2

启动服务

开启倾听端口,允许客户端连接。

3

停止服务

关闭倾听端口,中断所有客户端的连接。

4

退出

关闭服务器。

5

帮助

显示各个模块的功能及操作方法。

6

发送

向聊天室内发送系统消息。

4.2.3-1服务器各模块名称功能汇总表

客户端包含操作、设置、帮助、聊天四大模块,其中操作包含用户登录、用户注销和退出三个小模块,设置包含用户设置和连接设置两个小模块聊天模块除 具备普通聊天功能外,还能进行聊天时的表情选择。

序号

模块名

基本功能

1

用户设置

设置聊天时显示的名称,默认为匆匆过客。

2

连接设置

设置要连接的服务器所在主机的IP地址和倾听端口。

3

用户登录

连接到服务器端。

4

用户注销

与服务器断开连接。

5

退出

关闭客户端。

6

发送

发送聊天内容

7

悄悄话

聊天内容不会被服务器和说话对象以外的人看到

4.2.3-2 客户端各模块名称功能汇总表

4.2.4 系统数据流图

5 详细设计

本章主要介绍各模块的详细设计

5.1 用户登录

输入: 用户注册时使用的邮箱和对应的密码。

处理过程:首先进入登陆框,根据提示填写信息,主要填写用户的邮箱和用户的密码,接着在数据库中相应表中查询,查找该邮箱是否存在,如果存在则在该数据表中查找该邮箱对应的密码是否正确,同时记录登录人员的信息。 这样在登录人员没退出系统之前可以在自己的权限范围内进行一系列操作,这样需要重新登录系统如果没有找到该注册邮箱或出现密码错误则需要重新登录,如图5.1所示:

输出:相应的操作页面。

5.1 系统登录流程图

5.1.1 用户登录的具体实现

主要有两种消息发送数据,和接收数据,详述如下:与客户端上层的接口是CCIientSocket类,它隐藏了服务器底层通讯的细节及多线程发送数据的问题,提供给上一层一个统一的接口,CClientSocket类的使用,是先建立一个它的实例,再调用成员函数Create()传入必要的参数,发送数据时,就调用其成员函数SendData,或SendDataInThread处理发送数据,在CRecvSocket类的OnReceive里处理,向父窗口发送一个消息,并把接受到的数据作为参数传递给父窗口。两个函数的适应情况,SendData函数,适用于需要直接发送数据的场合,不需要回应。如果在线程里执行,则可由其返回值确定发送成功与否。而SendDatalnThread是建立一个线程,在线程里调用SendData函数进行发送数据,通过向指定接受窗口发送消息来确定是否成功。

5.1.2 J2EE的具体介绍

目前,Java 2平台有3个版本,它们是适用于小型设备和智能卡的Java 2平台Micro(Java 2 Platf01Tn Micro EditionJ2ME)、适用于桌面系统的Java 2平台标准版(Java 2 Platform Standard EditionJ2SE)、适用于创建服务器应用程序和服务的Java 2平台企业版(Java 2 PlatfonIl Enterprise EditionJ2EE)

5.2 用户注册

用户的用例图:

5.2 用户用例图

用户注册单元根据个人的一些信息进行注册主要要求邮箱的真实性,与用户的实际信息没有直接联系,求职人员注册时邮箱不能够重复,一个邮箱只允许注册一次,并开启了相应的检测措施防止用户非法注册。求职者的注册信息页面如图5.3所示。

a)设计添加注册信息的页面

5.3 用户注册

b)保存求职者的注册信息

这需要用UserDaoImpl.java类中save()方法。在该方法中,首先从数据表d_user中查询输入的邮箱是否存在,如果存在,则返回错误提示信息;否则,允许注册,再将输入的信息保存到求职者信息表中,同时置邮箱验证标志位。经过邮箱验证码验证后,注册才真正成功。

5..1 用户注册的流程

用户进入注册页面后,根据提示进行注册。运用正则表达式对各个输入框的输入内容做限定,输入内容之后查看给定的字符串是否符合正则表达式的过滤逻辑 。邮箱输入框不能为空并且保证唯一,还要按照给定的邮箱格式正确输出。格式为:var reg=/[a-zA-Z0-9]{3,10}@[a-zA-Z0-9]{2,5}.com/;用户的昵称不能为空,可以由小写英文字母、中文、数字组成,长度420个字符,一个汉字为两个字符。正则表达式的格式为:var reg=/^[\u4e00-\u9fa5_a-zA-Z0-9]{4,}$/;用户的密码不能为空,可以由大小写英文字母、数字组成,长度620位。正则表达式的格式为:var reg=/^[a-zA-Z0-9]{6,20}$/;再次输入的密码要和之前填入的密码完全一致。验证码框中填写的内应该和输入框前的图片中的内容完全一致。如图5.4所示:

5.4 用户注册过程

5.2.2 用户注册模块的技术分析

a)编写用户注册模块的动态表格类

该模块涉及的数据表是d_user,这个表主要是存储用户信息。通过这个数据表可以创建出对应的User实体类,通过JavaBean机制在这个类中获得对应的get()set()方法,创建各个无参和有参构造器。该模块中连接数据库用数据库连接池实现,连接池为db.properties文件。数据库的连接工具类为DBUtil.java。连接上数据库之后,创建接口文件UserDAO.java,并编写该接口的实现类UserDaoImpl.java。实现类中就包含数据的保存操作。运用此操作即可完成数据的存储。

b)用户密码加密的具体实现

在此模块中,使用的是MD5算法加密,MD5为计算机安全领域广泛使用的一种散列函数, 数据运算为另一固定长度值。在该模块中实现该方法的工具类是MD5Util.java。它将输入的密码运算为另一固定长度值如:lueSGJZetyySpUndWjMBEg==,存入数据库中密码列。

处理:用户输入的数据。

输出:加密后的固定长度数据。

c)验证码的具体实现

在验证码模块中,使用的总体架构还是Struts2,通过image.action连接到类:

com.tarena.dang.action.user.ImageAction。在该类中执行它的execute()方法,画出要显示的图片和图片中的干扰线,并利用Random()方法随机得到图片的背景颜色,最后将所得到的图片显示在register_form.jsp中的指定位置。在struts-user.xml中的说明验证码是以流的形式传回的。

d)用户注册的具体实现

在该模块中,用户通过在register_form.jsp中完成数据填写,点击注册后后台就进入到register.action中,读取相应的Action类,在这里进入的是:

com.tarena.dang.action.user.RegisterAction类中执行其中的execute()方法,并将数据做相应的处理。

e)Ajax技术在注册中的具体用法

register_form.jsp中为了实现这一功能使用的是EL表达式编写。EL存取变量数据的方法很简单,例如:${username}。它的意思是取出某一范围中名称为username变量。因为我们并没有指定哪一个范围的username,所以它会依序从PageRequestSessionApplication范围查找。假如途中找到username,就直接回传,不再继续找下去,但是假如全部的范围都没有找到时,就回传null。此文中$(“#****”)#后面跟的jsp页面id值,通过id值的指向,对对象的相应属性做出function(){}中的处理。

e)Java数据库连接(JDBC)

JDBC是访问关系数据库的APIJDBC的价值在于允许你访问任何关系型数据库都使用相同的API。利用JDBCAPI和不同的数据库驱动程序就可以访问不同的数据库。JDBC驱动程序共有四种类型:TypelType2Type3Type4

TypelJDBCODBC桥,在JDBC刚产生时,JDBCODBC桥是非常有用的。通过它,开发者可以使用JDBC来访问一个ODBC数据源。这种方式的缺点是,它需要在客户机器上安装有一个ODBC驱动,这样就失去了JDBC平台无关的好处。此外,ODBC驱动器需要客户端的管理。

Type2JDBCnative驱动桥,JDBCnative驱动桥提供了一个建筑在木地数据库驱动上的JDBC接口,而没有使用ODBCJDBC驱动将标准的JDBC调用转变为对数据库API的本地调用。使用类型2的驱动也会失去JDBC平台无关的好处,并且,需要在客户端安装数据库的本地驱动程序。

Type3JDBCnetwork桥,JDBC-network桥不需要客户端的数据库驱动,而是通过网络协议访问中间服务器,由中间服务器访问数据库。这会引起诸如负载均衡、连接池等技术,数据缓冲也是可能的。由于类型3的驱动通常可以带来相对小的下载时间,它是平台无关的,并且不需要客户端的安装和管理,因此很适合用作Intemet应用。

Type4:纯Java驱动,Type4使用纯Java数据库驱动来提供直接的数据库访问。用来代替类型2驱动程序,类型4驱动程序使用厂商专用的网络协议把JDBCAPI调用转换成直接网络调用,它们这样做是通过与数据库建立直接的套接字连接。类型4提供的性能一般要优于类型1和类型2驱动程序。类型4驱动程序也是应用中最简单的驱动程序,因为不需要安装其它库或者中间件。所有的主要数据库厂商都为他们的数据库提供了类型4JDBC驱动程序,也可以从第三方厂商获得这些驱动程序。

5.3 服务器登录

程序中,Socket首先通过socket函数建立服务期端的socket,并通过bind设置socket所使用的服务器IP地址和通信端接口。待服务器端socket建立之后,则通过侦听表示服务器应用程序开始侦听客户端的连接。当收到来自客户端的连接请求时,便通过accept建立与客户端的连接。处理过程:打开服务器端的界面,首先进行端口设置,填入要使用的ip地址或者是使用程序默认使用的端口号,输入无误后,点击启动服务器端。然后服务器就在该端口号下进行监听。如图5.5所示:

5.5 服务器登录

当不再使用该服务器时,即可直接点击退出按钮,取消该端口的连接。在服务器端对各个功能按钮进行了快捷键设置:

为服务菜单栏设置热键'V'

为端口设置快捷键为ctrl+p

为启动服务快捷键为ctrl+s

为端口设置快捷键为ctrl+T

为退出设置快捷键为ctrl+x

为帮助菜单栏设置热键'H'

为帮助设置快捷键为ctrl+p

6 使用说明

要使用该系统,首先进行用户注册,再按照注册信息登陆到系统,打开服务器端,连接ip地址,启动服务器。登陆的用户选择所要链接的端口号,链接到端口号之后,即可和其它用户进行聊天沟通,在聊天时可以使用系统提供的表情功能。有关程序调试,程序设计及调试运行利用JCreator“一次编写,各处运行”的编程优点,按功能模块结构设计菜单,布置各明细模块工作界面,编写各个模块的程序代码,进行编译连接运行,经过反复调试修改,以达到系统功能要求。这个过程具有大量的工作量,应仔细对每个程序细节进行分析思考、编写程序并调试,做到程序简洁清楚,尽量避免可能潜在的程序错误,并在必要的地方加以注释,以便于程序阅读和修改。

服务器启动界面图 服务器启动成功界面图

客户端界面图

用户设置界面图

用户成功登录界面图

两人私聊界面图

多人群聊界面图

用户注册图

注册成功图



根据即时通讯系统的实际需要,本系统系统开发采取Java技术平台的Struts2架构,Jsp作为前台页面的设计工具,采用java软件开发工具(Myeclipse)作为系统开发平台。数据库采用常用高效的MySQL作为开发工具,使用JDBC作为Java与数据库的连接。此系统实现了前台管理和后台管理三大模块。其中前台管理基本实现了通讯用户的注册登录,局域网内的通讯,用户之间的群聊私聊,添加表情等基本功能。后台管理实现服务器登录系统,踢掉用户的功能等。

由于这是我第一次接触Socket这门技术,用它进行编程还不是很明白,知识水平有限,再加上做设计的时间有限,在系统中有不足之处,如界面不美观;安全性问题考虑不详细;需要进一步完善底层通讯协议,使能够更好的处理数据的发送和接受;多线程下的对临界数据访问的问题;在客户端系统,功能的设置有待进一步丰富,功能的实现还有待完善和改进。没有实现等。

通过开发这个系统,我掌握了的软件开发基本过程,基本知识得到运用。我对JSPMVC的学习有了实际的经验,增加了自己的动手能力。但在这次毕业设计中的最大收获并不是掌握这几门开发工具的应用,而是学会了设计系统的思维方法。



致谢

值此提交本论文之际,我首先要向导师倪素虹老师表示衷心的感谢。我的课题是在导师倪素虹老师的悉心指导下完成的。在本次毕业设计的每一个地方都凝聚着倪老师的心血,没有老师的悉心指导,就没有本论文的顺利完成。从课题的研究、论文选题到实证调研、论文撰写,都饱含了倪老师的亲切关怀和悉心指导,在论文遇到瓶颈时倪老师给予我无微不至的指导与帮助。衷心感谢倪素虹老师所给予的无私帮助,她渊博的学识、敏锐而超前的学术意识、民主而严谨的治学作风将使我受益终生,并激励我在今后的工作、学习和生活中,时刻保持勤奋刻苦的工作态度和求实创新的敬业精神。导师严谨的治学态度、深厚的学术功底使我获益良多,也深深的影响和激励着我。

感谢河北科技大学信息学院的各位老师,在他们的帮助下,使这次我的毕业设计和论文能够顺利完成。

感谢河北科技大学信息院软件091班的各位同学,大家的热情和团结对我起到了极大的鼓舞和帮助。

感谢一些网络论坛,优秀站点对本次设计的技术支持,对本人此次设计过程中的调试提供了强大的帮助。

最后,感谢父母亲在我求学过程中所给予的支持与鼓励,他们的关爱和殷切期望是我学习进步的不竭动力,愿亲爱的爸爸妈妈永远健康快乐!

毕业是人身中一个重要的定点,它代表着一个进程的结束却也标志着另一个进程的开始,愿以本文与我最敬爱的以及所有关心、帮助过我的人们分享。



参考文献

1 孙更新,宾晟,宫生文.Java程序开发大全 基于Myeclipse平台.北京市:中国铁道出版社,2010.08

2 王伟平.Struts2完全学习手册.北京市:清华大学出版社,2011.01

3 张洪伟.Tomcat Web开发及整合应用.北京市:清华大学出版社,2006

4 Alex MacCaw李晶,张散集.基于MVCJavaScript Web应用开发.电子工业出版社,2012-05-01

5 张红琴,杨省伟.基于CSS+JavaScript的网页下拉菜单的设计与研究.苏州大学学报,2012(2):10~13

6 甘文丽,刘为超.基于Struts2Ajax的企业级Web应用开发[J].工矿自动化,2013,(2).

7 Gregory D.Speegle.JDBC Practical Guide for Java Programmers.Elsevier Inc,2002

8 Baron Scbwartz,Peter Zaitsev,Vaidim Tkacbenko.High Performance MySQL.东南大学出版社,2012-6-1

9 Budi Kurniawan,Paul Deck.深入剖析Tomcat.机械工业出版社,2012-2-1

10 刘西杰,柳林.HTMLCSSJavaScript网页制作从入门到精通.人民邮电出版社,2012

11 王进编著. J2EE框架深度历险.南京市:东南大学出版社, 2009.09

12 张峋,杨三成.关键技术 JSPJDBC应用详解.中国铁道出版社,2010-11-01

13 耿祥义张跃平JSP基础教程(第2版).清华大学出版社2009-10-01

本文来源:https://www.2haoxitong.net/k/doc/d8c6356f0066f5335a81215a.html

《即时通讯系统的设计与实现.doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档

文档为doc格式