聊天系统需求分析Word文件下载.docx
- 文档编号:21236465
- 上传时间:2023-01-28
- 格式:DOCX
- 页数:34
- 大小:73.79KB
聊天系统需求分析Word文件下载.docx
《聊天系统需求分析Word文件下载.docx》由会员分享,可在线阅读,更多相关《聊天系统需求分析Word文件下载.docx(34页珍藏版)》请在冰豆网上搜索。
技术背景
C/S模型
在网络连接模式中,除对等网外,还有另一种形式的网络,即客户机/服务器网[3],Client/Server。
在客户机/服务器网络中,服务器是网络的核心,而客户机是网络的基础,客户机依托服务器取得所需要的网络资源,而服务器为客户机提供网络必需的资源。
这里客户和服务器都是指通信中所涉及的两个应用进程(软件)。
利用运算机的人是运算机的“用户”(user)而不是“客户”(client)。
但在许多国外文献中,也常常把运行客户程序的机械称为client(这种情形下也可把client译为“客户机”),把运行服务器程序的机械称为server。
所以有时要按照上下文判断client与server是指软件仍是硬件。
它是软件系统体系结构,通过它能够充分利用两头硬件环境的优势,将任务合理分派到Client端和Server端来实现,降低了系统的通信开销。
目前大多数应用软件系统都是Client/Server形式的两层结构,由于此刻的软件应用系统正在向散布式的Web应用进展,Web和Client/Server应用都能够进行一样的业务处置,应用不同的模块共享逻辑组件;
因此,内部的和外部的用户都能够访问新的和现有的应用系统,通过现有应用系统中的逻辑能够扩展出新的应用系统。
这也就是目前应用系统的进展方向。
TCP/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利用2五、Xwindows利用6000。
这些端口号是‘广为人知’的,因为在成立与特定的主机或服务的连接时,需要这些地址和目的地址进行通信
编程技术
语言
Java[6]是由公司于1995年5月推出的Java程序设计语言(以下简称Java语言)和Java平台的总称。
用Java实现的HotJava阅读器(支持Javaapplet)显示了Java的魅力:
跨平台、动态的、计算。
从此,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.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应用程序,使客户只需最少的安装和管理开销即可实现这些应用程序。
系统分析与设计
需求分析
这次开发的网络聊天工具可作为个人的交流工具利用,通信的安全性不是很高,但要求信息的响应速度要较快,让用户充分享受到网络即时消息的方便和快捷。
本聊天工具由服务器端程序和客户端程序两部份组成,整体采用JAVA平台开发,并利用MYSQL管理数据库数据。
服务器是能够监听和查看用户的大体操作;
客户端程序面向实际用户,它有必要的界面的按钮,向用户提供网络即时消息的功能:
本聊天需包括如下大体功能:
1.客户端:
(1)新用户注册;
(2)用户登录验证;
(3)获取老友列表并显示老友状态(在线/不在线);
(4)添加用户老友;
(5)删除用户老友;
(6)用户与老友聊天(可查看聊天记录);
(7)接收系统信息。
2.服务端:
(1)启动和关闭后台服务器;
(2)查看客户端登录的相关信息(客户端登岸时刻/登岸IP);
(3)向所有在线用户发送系统消息。
系统整体框架
整体设计
网络即时通信系统采用客户机/服务器(C/S)的模式来设计,是一个3层的C/S结构:
数据库服务器->
应用程序服务器端->
应用程序客户端。
系统采用C/S结构,能够将任务合理分派到客户机端和服务器端,从而降低了系统的通信开销,如图所示:
图C/S体系结构
1.
客户层
客户层也叫应用层,是应用程序的用户接口部份。
给聊天工具设计一个客户层具有很多长处,这是因为客户层担负着用户与应用间的对话功能。
它用于检查用户的输入数据,显示应用的输出数据。
为了利用户能直观地进行操作,客户层需要合作图形用户接口。
若聊天用户变更,系统只需要改写显示控制和数据检查程序即可,而不影响其他两层。
数据检查的内容限于数据的形式和值的范围,不包括有关业务本身的处置逻辑。
2.服务层
服务层也叫功能层,相当于应用的本体,它是将具体的业务处置逻辑编入程序中。
例如,用户需要检索数据,系统设法将有关检索要求的信息一次性地传送给功能层;
而用户登录后,聊天登录信息是由功能层处置过的检索结果数据,它也是一次性传送给表示层的。
在应用设计中,必需避免表示层和功能层之间进行多次的数据互换,这就需要尽可能进行一次性的业务处置,达到优化整体设计的目的。
3.数据层
据层就是DBMS,本系统利用了Microsoft公司的SQLServer2000数据库服务器来管理数据。
MYSQL能迅速执行大量数据的更新和检索。
因此,从功能层传送到数据层的“要求”一般都利用SQL语言。
功能模块
聊天工具按如下进程完成通信:
客户向服务器注册,告知服务器它在监听某主题;
客户注册以后,向服务器发送消息;
服务器再把消息发送给所有监听些主题的客户。
聊天工具由服务器端和客户端组成,要分析清楚两方面所要完成的任务,对设计来讲,等于完成了一半。
按照聊天的通信步骤,系统的功能模块如图所示:
即时消息系统
服务器端
客户端
后台操作
建立连接.
监听客户请求
用户登录消息
用户管理
好友管理
聊天功能
用户登录
用户注册
查找好友
添加好友
删除好友
发送消息
接收消息
聊天记录
数据库操作
发送系统消息
消息管理
图功能模块
1.服务器端
服务器完成5大功能:
成立连接、监听客户请求、操作数据库、查看用户登录消息和发送系统消息这5大功能的具体含义如下:
成立连接:
系统启动时成立一个ServerSocket连接,绑定本地运算机的一个端口,不断侦听是不是有客户端连接或断开连接。
监听客户请求:
服务器端是一个信息的枢纽,所有客户端的信息都要传到服务器端,再由服务器按照要求分发出去,客户端在向服务器发送各类请求,如:
上线、隐身、获取我的老友、查找老友等等。
数据库操作:
当客户机向服务器发送请求时,服务器需要通过数据库管理软件对数据库的数据进行增、删和查询。
如录入用户信息、修改用户信息、查找老友数据库的资料和添加老友数据到数据库等。
用户登录消息:
在服务器端的界面上,咱们能够看到用户的登录消息,包括IP地址、端口号,登录时刻等。
发送系统消息:
在客户端管理界面上,能够输入消息,并发送给所有的在线用户。
2.客户端
客户端完成3大功能:
用户管理、老友管理和聊天功能,这些功能的含义如下:
用户管理:
此功能又包括2个子功能,用户登录和用户注册。
客户端与服务器端成立通信通道,向服务器发送新建用户的信息,接收来自服务器听信息进行注册。
注册完毕后,能够通过系统的登录界面,输入账号和密码,然后发送到服务器进行验证。
若是验证通过,则打开程序的主界面。
老友管理:
此功能又包括3个子功能,查找老友、添加老友和删除老友。
在程序的主界面,提供查找老友的功能。
查找老友时,客户端向服务器发送查找老友请求,服务器端返回在线用户的信息,现在咱们能够通过此来进行添加老友,并跟老友通过通信连接。
聊天功能:
客户端在与老友端成立通信连接后,即能够与老友进行聊天,聊天时发送的是文本信息,老友端在接收到聊天消息后,会提示收到消息,并由老友端自主打开消息接收界面。
所有的聊天消息都会被保留起来,能够查看与每一个老友的聊天记录。
聊天记录包括内容和时刻。
系统详细设计
多线程设计
1.服务器端的多线程
服务器需要和多个客户端同时进行通信,这就是服务器端的多线程。
一旦服务器发觉一个新的客户端与之成立了连接,就马上新建一个线程与客户端进行通信。
用多线程的益处在于能够同时处置多个通信连接,不会出于由于数据排队而发生的延迟或丢失,能够专门好利用系统的性能。
服务器为每一个连接着的客户成立一个线程,为了同时响应多个客户端,需设计一个主线程来启动服务器端的多线程。
主线程与进程结构类似,它在取得新连接时生成一个线程来处置那个那个连接。
线程调度速度快,占用资源少,可共享进程空间中的数据,因此服务器的响应速度较快,且I/O吞吐量较大。
在程序的代码里面,服务器端的多线程类概念为:
ClassServerThreadextendsThread{户端的多线程
客户端能够完成信息的接收和发送操作,这与服务器的多线程概念不同,能够采用循环等待的方式来实现客户端。
利用循环等待的方式,客户端第一接收用户输入的内容并将它们发送到服务器端,然后接收来自服务器端的信息,将其返回给客户端的用户。
在程序的代码里面,客户端的多线程概念为:
classMainWinextendsJFrameimplementsRunnable{表
icq表寄存用户信息,信息。
利用MYSQL2000成立数据表,如表所示:
表用户信息表
字段
数据类型
说明
Ip
int
用户Ip
Id
char
用户的账号
name
用户的昵称
bit
用户ip
表
friend表的设计比较简单,本系统设计了用户的号码和老友的号码两个字段。
利用SQLServer2000成立如下数据表:
表老友信息表
ip
id
好友的账号
服务器的设计
1.主服务器类的设计
主服务器实现了服务器的多线程,服务器端有一个进程(或多个进程)在指定的端口等待客户的连接信息。
一时连接成功,就可以够按设计的数据互换方式和格式进行数据传输。
客户端只在需要的时候向服务端发出连接请求。
主服务器类挪用ServerThread类,而每一个ServerThread实体就是一个单独的线程,即对应于客户端连接请求响应的线程。
它的执行进程如下:
利用ServerSockets=newServerSocket(8000)语句绑定8000端口创建套接口
利用Socket=()来监听用户的请求
利用newServerThread(socket)语句创建新的线程。
类的设计
客户端发送连接请求的时候,服务器端创建一个ServerThread(socket)线程。
ServerThread类的函数执行进程可描述如下:
执行ServerThreadz(Sockets)线程构造函数
执行socket=s取得传递参数;
BufferedReader(newInputStreamReader()))创建输入流;
利用PrintWriter(newBufferedWriter(newOutputStreamWriter())创建输出流;
利用start()函数启动线程;
最后利用run()线程监听函数。
3.登录验证
(1)登录线程
若是客户端输入的字符串“logi
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 聊天 系统 需求 分析
![提示](https://static.bdocx.com/images/bang_tan.gif)