聊天系统需求分析1.docx
《聊天系统需求分析1.docx》由会员分享,可在线阅读,更多相关《聊天系统需求分析1.docx(34页珍藏版)》请在冰豆网上搜索。
![聊天系统需求分析1.docx](https://file1.bdocx.com/fileroot1/2023-1/5/4e1eee87-2da2-422c-8fcc-d1992276ecba/4e1eee87-2da2-422c-8fcc-d1992276ecba1.gif)
聊天系统需求分析1
聊天系统_需求分析[1]
绪论
1.1选题背景
1.1.1即时消息系统的研究现状
即时消息系统[1](InstantMessenger,IM)是一种在后PC时代兴起的,以Internet网络为基础的,允许交互双方即时地传送文字、语音、视频等信息,能够跟踪网络用户在线状态的网络应用软件。
即时消息系统产生有着深刻的社会原因:
人们都有渴望社交,获得社会尊重、实现自我的需求,这正是即时消息软件风行的原动力,而物质文明的日益发达所带来副作用,又使得人们习惯与周围的人保持距离,以致人们更愿意对陌生人敞开心扉,在网络中可以跨越年龄、身份、行业、地域的限制,达到人与人、人与信息之间的零距离交流。
从这点上讲,即时消息系统的出现改变了人们的沟通方式和交友文化,大大拓展了个人生活交流的空间。
国内最为流行的即时消息软件是OICQ(简称QQ)。
它以良好的中文界面和不断增强的功能形成了一定的QQ网络文化。
该软件是由腾讯公司于1999年2月自主开发的基于Internet的即时消息系统。
腾讯QQ目前已成为中国最主要的即时消息服务网络软件。
作为一种即时消息工具,QQ支持显示好友在线、即时传送文字、语音和文件等功能。
QQ还与无线寻呼、GSM短信息、IP电话网互联,为用户提供互联网短信及信息增值服务。
腾讯QQ开发和拓展统一、高速、丰富的互联网应用平台、在线广告业务、移动通信业务、ISP及IP电话合作业务、企业商用即时消息服务、在线客户支持及在线呼叫业务。
1.1.2即时消息系统的发展趋势
21世纪将是网络化、信息化的世纪,信息的融合已经成为社会发展的主流方向[2]。
即时消息系统将不断与信息交流领域的系统相互集成和渗透,扩展其自己的功能和应用范围,满足未来话音,数据和视频的多媒体应用需要,使即时消息以更丰富的接入方法,更高的服务质量,更友好的面貌呈现在世人的面前。
从功能角度来看,即时消息系统向支持全媒体方向发展,随着多媒体技术在网络应用中的发展,即时消息系统承载的媒体,不再局限于原来的文字、语音和文件的信息交换,信息载体扩展到图形、图像和流媒体等多媒体业务上。
目前ICQ和QQ预设了部分简单的表情图像,通过传输图像代码来传递表情图像,可以被视为即时消息开发商开发支持图形、图像为载体的即时消息软件的开端。
从应用范围角度来看,即时消息系统集中在Internet个人用户之间的信息交流应用,随着网络技术应用的发展,即时消息系统应用范围向园区化、集团化拓展,应用领域突破个人,而用于远程教学、远程医疗、远程演示、网络会议等领域。
1.1.3论文研究的主要内容
本论文的主要工作是利用编程技术建立一基于J2SE的即时消息系统,主要实现网络即时聊天功能。
在建立这个系统的过程中,我将会研究JAVA语言,多线程编程、网络编程以及数据据等方面的知识。
在我的论文中,我将会研究即时消息的发展,并针对不同即时消息工具之间不能互通的弊端,介绍即时消息系统中的应用。
为了更好地实现系统,我们还要研究J2SE技术。
在论文中介绍了J2SE的体系结构、系统设计以及J2SE的开发环境。
熟悉了开发平台,我们还要了解基于TCP/IP的Socket网络连接的基础知识,包括网络通信系统架构及Socket通信在该系统中的应用等内容。
在论文中将着重介绍网络即时消息系统的设计和实现,包括界面及各个功能模块的设计,给出了相应的流程图并对其功能做了详细描述,最终实现了客户端之间的即时聊天通信功能。
最后是结尾部分,对本文做了总结并针对该系统提出了一些不足和今后需要改进的地方。
1.2技术背景
1.2.1C/S模型
在网络连接模式中,除对等网外,还有另一种形式的网络,即客户机/服务器网[3],Client/Server。
在客户机/服务器网络中,服务器是网络的核心,而客户机是网络的基础,客户机依靠服务器获得所需要的网络资源,而服务器为客户机提供网络必须的资源。
这里客户和服务器都是指通信中所涉及的两个应用进程(软件)。
使用计算机的人是计算机的“用户”(user)而不是“客户”(client)。
但在许多国外文献中,也经常把运行客户程序的机器称为client(这种情况下也可把client译为“客户机”),把运行服务器程序的机器称为server。
所以有时要根据上下文判断client与server是指软件还是硬件。
它是软件系统体系结构,通过它可以充分利用两端硬件环境的优势,将任务合理分配到Client端和Server端来实现,降低了系统的通讯开销。
目前大多数应用软件系统都是Client/Server形式的两层结构,由于现在的软件应用系统正在向分布式的Web应用发展,Web和Client/Server应用都可以进行同样的业务处理,应用不同的模块共享逻辑组件;因此,内部的和外部的用户都可以访问新的和现有的应用系统,通过现有应用系统中的逻辑可以扩展出新的应用系统。
这也就是目前应用系统的发展方向。
1.2.2TCP/IP协议
1.IP
网际协议IP是TCP/IP的心脏,也是网络层中最重要的协议[4]。
IP层接收由更低层(网络接口层例如以太网设备驱动程序)发来的数据包,并把该数据包发送到更高层---TCP或UDP层;相反,IP层也把从TCP或UDP层接收来的数据包传送到更低层。
IP数据包是不可靠的,因为IP并没有做任何事情来确认数据包是按顺序发送的或者没有被破坏。
IP数据包中含有发送它的主机的地址(源地址)和接收它的主机的地址(目的地址)。
高层的TCP和UDP服务在接收数据包时,通常假设包中的源地址是有效的。
也可以这样说,IP地址形成了许多服务的认证基础,这些服务相信数据包是从一个有效的主机发送来的。
IP确认包含一个选项,叫作IPsourcerouting,可以用来指定一条源地址和目的地址之间的直接路径。
对于一些TCP和UDP的服务来说,使用了该选项的IP包好像是从路径上的最后一个系统传递过来的,而不是来自于它的真实地点。
这个选项是为了测试而存在的,说明了它可以被用来欺骗系统来进行平常是被禁止的连接。
那么,许多依靠IP源地址做确认的服务将产生问题并且会被非法入侵。
2.TCP
如果IP数据包中有已经封好的TCP数据包[5],那么IP将把它们向‘上’传送到TCP层。
TCP将包排序并进行错误检查,同时实现虚电路间的连接。
TCP数据包中包括序号和确认,所以未按照顺序收到的包可以被排序,而损坏的包可以被重传。
TCP将它的信息送到更高层的应用程序,例如Telnet的服务程序和客户程序。
应用程序轮流将信息送回TCP层,TCP层便将它们向下传送到IP层,设备驱动程序和物理介质,最后到接收方。
面向连接的服务(例如Telnet、FTP、rlogin、XWindows和SMTP)需要高度的可靠性,所以它们使用了TCP。
DNS在某些情况下使用TCP(发送和接收域名数据库),但使用UDP传送有关单个主机的信息。
3.UDP
UDP与TCP位于同一层,但它不管数据包的顺序、错误或重发。
因此,UDP不被应用于那些使用虚电路的面向连接的服务,UDP主要用于那些面向查询---应答的服务,例如NFS。
相对于FTP或Telnet,这些服务需要交换的信息量较小。
使用UDP的服务包括NTP(网络时间协议)和DNS(DNS也使用TCP)。
欺骗UDP包比欺骗TCP包更容易,因为UDP没有建立初始化连接(也可以称为握手)(因为在两个系统间没有虚电路),也就是说,与UDP相关的服务面临着更大的危险。
4.TCP与UDP的端口结构
TCP和UDP服务通常有一个客户/服务器的关系,例如,一个Telnet服务进程开始在系统上处于空闲状态,等待着连接。
用户使用Telnet客户程序与服务进程建立一个连接。
客户程序向服务进程写入信息,服务进程读出信息并发出响应,客户程序读出响应并向用户报告。
因而,这个连接是双工的,可以用来进行读写。
两个系统间的多重Telnet连接是如何相互确认并协调一致呢?
TCP或UDP连接唯一地使用每个信息中的如下四项进行确认:
● 源IP地址:
发送包的IP地址;
● 目的IP地址:
接收包的IP地址;
● 源端口:
源系统上的连接的端口;
● 目的端口:
目的系统上的连接的端口。
端口是一个软件结构,被客户程序或服务进程用来发送和接收信息。
一个端口对应一个16比特的数。
服务进程通常使用一个固定的端口,例如,SMTP使用25、Xwindows使用6000。
这些端口号是‘广为人知’的,因为在建立与特定的主机或服务的连接时,需要这些地址和目的地址进行通讯
1.2.3编程技术
1.JAVA语言
Java[6]是由SunMicrosystems公司于1995年5月推出的Java程序设计语言(以下简称Java语言)和Java平台的总称。
用Java实现的HotJava浏览器(支持Javaapplet)显示了Java的魅力:
跨平台、动态的Web、Internet计算。
从此,Java被广泛接受并推动了Web的迅速发展,常用的浏览器现在均支持Javaapplet。
另一方面,Java技术也不断更新。
Java语言的优良特性使得Java应用具有无比的健壮性和可靠性,这也减少了应用系统的维护费用。
Java对对象技术的全面支持和Java平台内嵌的API[7]能缩短应用系统的开发时间并降低成本。
Java的编译一次,到处可运行的特性使得它能够提供一个随处可用的开放结构和在多平台之间传递信息的低成本方式。
特别是Java企业应用编程接口(JavaEnterpriseAPIs)为企业计算及电子商务应用系统提供了有关技术和丰富的类库。
2.Winsock
Windows下网络编程的规范-WindowsSockets是Windows下得到广泛应用的、开放的、支持多种协议的网络编程接口。
通信的基础是套接口(Socket),一个套接口是通讯的一端。
在这一端上你可以找到与其对应的一个名字。
一个正在被使用的套接口都有它的类型和与其相关的进程。
套接口存在于通讯域中。
通讯域是为了处理一般的线程通过套接口通讯而引进的一种抽象概念。
在一次网络通信/连接中有以下几个参数需要被设置:
本地IP地址-本地端口号-对方端口号-对方IP地址。
左边两部分称为一个半关联,当与右边两部分建立连接后就称为一个全关联。
在这个全关联的套接口上可以双向的交换数据。
如果是使用无连接的通信则只需要建立一个半关联,在发送和接收时指明另一半的参数就可以了,所以可以说无连接的通信是将数据发送到另一台主机的指定端口。
此外不论是有连接还是无连接的通信都不需要双方的端口号相同。
Socket接口是访问Internet使用得最广泛的方法。
3.多线程编程
多线程[8]是为了使得多个线程并行的工作以完成多项任务,以提高系统的效率。
线程是在同一时间需要完成多项任务的时候被实现的。
使用线程的好处有以下几点:
·使用线程可以把占据长时间的程序中的任务放到后台去处理
·用户界面可以更加吸引人,这样比如用户点击了一个按钮去触发某些事件的处理,可以弹出一个进度条来显示处理的进度
·程序的运行速度可能加快
·在一些等待的任务实现上如用户输入、文件读写和网络收发数据等,线程就比较有用了。
在这种情况下我们可以释放一些珍贵的资源如内存占用等等。
多线程在JAVA里面的应用也是很广泛。
Java对多线程的支持是非常强大的,他屏蔽掉了许多的技术细节,让我们可以轻松的开发多线程的应用程序。
1.2.4开发平台
1.J2SE平台
Java2平台包括:
标准版(J2SE)、企业版(J2EE)和微缩版(J2ME)三个版本。
J2SE,J2ME和J2EE,这也就是SunONE(OpenNetEnvironment)体系。
J2SE就是Java2的标准版,主要用于桌面应用软件的编程;J2ME主要应用于嵌入是系统开发,如手机和PDA的编程;J2EE是Java2的企业版,主要用于分布式的网络程序的开发,如电子商务网站和ERP系统。
StandardEdition(标准版)J2SE包含那些构成Java语言核心的类。
比如:
数据库连接、接口定义、输入/输出、网络编程定位在客户端,主要用于桌面应用软件的编程。
J2SE包含那些构成Java语言核心的类。
比如:
数据库连接、接口定义、输入/输出、网络编程
2.MYSQL数据库
MYSQL[9]的特性MYSQL的特性包括:
Internet集成。
SQLServer2000数据库引擎提供完整的XML支持。
它还具有构成最大的Web站点的数据存储组件所需的可伸缩性、可用性和安全功能。
MYSQL程序设计模型与WindowsDNA构架集成,用以开发Web应用程序,并且MYSQL支持EnglishQuery和Microsoft搜索服务等功能,在Web应用程序中包含了用户友好的查询和强大的搜索功能。
可伸缩性和可用性。
同一个数据库引擎可以在不同的平台上使用,从运行MicrosoftWindows®98的便携式电脑,到运行MYSQL数据中心版的大型多处理器服务器。
MYSQL企业版支持联合服务器、索引视图和大型内存支持等功能,使其得以升级到最大Web站点所需的性能级别。
企业级数据库功能。
MYSQL关系数据库引擎支持当今苛刻的数据处理环境所需的功能。
数据库引擎充分保护数据完整性,同时将管理上千个并发修改数据库的用户的开销减到最小。
MYSQL分布式查询使您得以引用来自不同数据源的数据,就好象这些数据是MYSQL数据库的一部分,同时分布式事务支持充分保护任何分布式数据更新的完整性。
复制同样使您得以维护多个数据复本,同时确保单独的数据复本保持同步。
可将一组数据复制到多个移动的脱接用户,使这些用户自主地工作,然后将他们所做的修改合并回发布服务器。
易于安装、部署和使用。
MYSQL中包括一系列管理和开发工具,这些工具可改进在多个站点上安装、部署、管理和使用SQLServer的过程。
MYSQL还支持基于标准的、与WindowsDNA集成的程序设计模型,使MYSQL数据库和数据仓库的使用成为生成强大的可伸缩系统的无缝部分。
这些功能使您得以快速交付MYSQL应用程序,使客户只需最少的安装和管理开销即可实现这些应用程序。
系统分析与设计
2.1需求分析
此次开发的网络聊天工具可作为个人的交流工具使用,通信的安全性不是很高,但要求信息的响应速度要较快,让用户充分享受到网络即时消息的方便和快捷。
本聊天工具由服务器端程序和客户端程序两部分组成,整体采用JAVA平台开发,并使用MYSQL管理数据库数据。
服务器是可以监听和查看用户的基本操作;客户端程序面向实际用户,它有必要的界面的按钮,向用户提供网络即时消息的功能:
本聊天需包含如下基本功能:
1.客户端:
(1)新用户注册;
(2)用户登录验证;
(3)获取好友列表并显示好友状态(在线/不在线);
(4)添加用户好友;
(5)删除用户好友;
(6)用户与好友聊天(可查看聊天记录);
(7)接收系统信息。
2.服务端:
(1)启动和关闭后台服务器;
(2)查看客户端登录的相关信息(客户端登陆时间/登陆IP);
(3)向所有在线用户发送系统消息。
2.2系统总体框架
2.2.1总体设计
网络即时通讯系统采用客户机/服务器(C/S)的模式来设计,是一个3层的C/S结构:
数据库服务器->应用程序服务器端->应用程序客户端。
系统采用C/S结构,可以将任务合理分配到客户机端和服务器端,从而降低了系统的通信开销,如图3.1所示:
图3.1C/S体系结构
1. 客户层
客户层也叫应用层,是应用程序的用户接口部分。
给聊天工具设计一个客户层具有很多优点,这是因为客户层担负着用户与应用间的对话功能。
它用于检查用户的输入数据,显示应用的输出数据。
为了使用户能直观地进行操作,客户层需要合作图形用户接口。
若聊天用户变更,系统只需要改写显示控制和数据检查程序即可,而不影响其他两层。
数据检查的内容限于数据的形式和值的范围,不包括有关业务本身的处理逻辑。
2.服务层
服务层也叫功能层,相当于应用的本体,它是将具体的业务处理逻辑编入程序中。
例如,用户需要检索数据,系统设法将有关检索要求的信息一次性地传送给功能层;而用户登录后,聊天登录信息是由功能层处理过的检索结果数据,它也是一次性传送给表示层的。
在应用设计中,必须避免表示层和功能层之间进行多次的数据交换,这就需要尽可能进行一次性的业务处理,达到优化整体设计的目的。
3.数据层
据层就是DBMS,本系统使用了Microsoft公司的SQLServer2000数据库服务器来管理数据。
MYSQL能迅速执行大量数据的更新和检索。
因此,从功能层传送到数据层的“要求”一般都使用SQL语言。
2.2.2功能模块
聊天工具按如下过程完成通信:
● 客户向服务器注册,告知服务器它在监听某主题;
● 客户注册之后,向服务器发送消息;
● 服务器再把消息发送给所有监听些主题的客户。
聊天工具由服务器端和客户端组成,要分析清楚两方面所要完成的任务,对设计来说,等于完成了一半。
根据聊天的通信步骤,系统的功能模块如图3.2所示:
即时消息系统
服务器端
客户端
后台操作
建立连接.
监听客户请求
用户登录消息
用户管理
好友管理
聊天功能
用户登录
用户注册
查找好友
添加好友
删除好友
发送消息
接收消息
聊天记录
数据库操作
发送系统消息
消息管理
图3.2功能模块
1.服务器端
服务器完成5大功能:
建立连接、监听客户请求、操作数据库、查看用户登录消息和发送系统消息这5大功能的具体含义如下:
● 建立连接:
系统启动时建立一个ServerSocket连接,绑定本地计算机的一个端口,不断侦听是否有客户端连接或者断开连接。
● 监听客户请求:
服务器端是一个信息的枢纽,所有客户端的信息都要传到服务器端,再由服务器根据要求分发出去,客户端在向服务器发送各种请求,如:
上线、隐身、获取我的好友、查找好友等等。
● 数据库操作:
当客户机向服务器发送请求时,服务器需要通过数据库管理软件对数据库的数据进行增、删和查询。
如录入用户信息、修改用户信息、查找好友数据库的资料以及添加好友数据到数据库等。
● 用户登录消息:
在服务器端的界面上,我们可以看到用户的登录消息,包括IP地址、端口号,登录时间等。
● 发送系统消息:
在客户端管理界面上,可以输入消息,并发送给所有的在线用户。
2.客户端
客户端完成3大功能:
用户管理、好友管理和聊天功能,这些功能的含义如下:
● 用户管理:
此功能又包括2个子功能,用户登录和用户注册。
客户端与服务器端建立通信通道,向服务器发送新建用户的信息,接收来自服务器听信息进行注册。
注册完毕后,可以通过系统的登录界面,输入账号和密码,然后发送到服务器进行验证。
如果验证通过,则打开程序的主界面。
● 好友管理:
此功能又包括3个子功能,查找好友、添加好友和删除好友。
在程序的主界面,提供查找好友的功能。
查找好友时,客户端向服务器发送查找好友请求,服务器端返回在线用户的信息,此时我们可以通过此来进行添加好友,并跟好友通过通信连接。
● 聊天功能:
客户端在与好友端建立通信连接后,便可以与好友进行聊天,聊天时发送的是文本信息,好友端在接收到聊天消息后,会提示收到消息,并由好友端自主打开消息接收界面。
所有的聊天消息都会被保存起来,可以查看与每个好友的聊天记录。
聊天记录包括内容和时间。
2.3系统详细设计
2.3.1多线程设计
1.服务器端的多线程
服务器需要和多个客户端同时进行通信,这就是服务器端的多线程。
一旦服务器发现一个新的客户端与之建立了连接,就马上新建一个线程与客户端进行通信。
用多线程的好处在于可以同时处理多个通信连接,不会出于由于数据排队而发生的延迟或者丢失,可以很好利用系统的性能。
服务器为每个连接着的客户建立一个线程,为了同时响应多个客户端,需设计一个主线程来启动服务器端的多线程。
主线程与进程结构类似,它在获得新连接时生成一个线程来处理这个这个连接。
线程调度速度快,占用资源少,可共享进程空间中的数据,因此服务器的响应速度较快,且I/O吞吐量较大。
在程序的代码里面,服务器端的多线程类定义为:
ClassServerThreadextendsThread{//略};
2.客户端的多线程
客户端能够完成信息的接收和发送操作,这与服务器的多线程概念不同,可以采用循环等待的方法来实现客户端。
利用循环等待的方式,客户端首先接收用户输入的内容并将它们发送到服务器端,然后接收来自服务器端的信息,将其返回给客户端的用户。
在程序的代码里面,客户端的多线程定义为:
classMainWinextendsJFrameimplementsRunnable{//略};
2.3.2数据库设计
数据库表主要用来存放用户的注册信息和用户的好友资料,可利用两张数据表用来存放用户信息和用户好友资料。
在MYSQL上新建名为javaicq的数据库,并建立两张数据库表:
用户的基本信息表(表名icq)和用户好友数据库表(表名friend).
1.icq表
icq表存放用户信息,信息。
利用MYSQL2000建立数据表,如表3.1所示:
表3.1用户信息表
字段
数据类型
说明
Ip
int
用户Ip
Id
char
用户的账号
name
char
用户的昵称
Ip
bit
用户ip
2.frind表
friend表的设计比较简单,本系统设计了用户的号码和好友的号码两个字段。
利用SQLServer2000建立如下数据表:
表3.2好友信息表
字段
数据类型
说明
ip
char
用户Ip
id
char
好友的账号
2.3.3服务器的设计
1.主服务器类的设计
主服务器实现了服务器的多线程,服务器端有一个进程(或多个进程)在指定的端口等待客户的连接信息。
一时连接成功,就可以按设计的数据交换方法和格式进行数据传输。
客户端只在需要的时候向服务端发出连接请求。
主服务器类调用ServerThread类,而每个ServerThread实体就是一个单独的线程,即对应于客户端连接请求响应的线程。
它的执行过程如下:
● 使用ServerSockets=newServerSocket(8000)语句绑定8000端口创建套接口
● 使用Socket=s.accept()来监听用户的请求
● 使用newServerThread(socket)语句创建新的线程。
2.ServerThread类的设计
客户端发送连接请求的时候,服务器端创建一个ServerThread(socket)线