在线聊天系统毕业设计论文Word文档格式.docx
《在线聊天系统毕业设计论文Word文档格式.docx》由会员分享,可在线阅读,更多相关《在线聊天系统毕业设计论文Word文档格式.docx(17页珍藏版)》请在冰豆网上搜索。
四系统开发思路.....................................17
五需求总结.........................................18
第三章系统具体实现....................................21
一概要设计..........................................21
二定义服务器端和客户端的通信结构及含义..............22
三服务器端的实现流图................................25
四客户端的实现流图..................................28
第四章系统测试.....................................30
第五章系统运行和维护.................................32
第六章结束语.........................................33
参考文献...............................................34
序言
随着现代技术的不断输入和信息化的广泛普及,网络作为一种新兴事物,在近些年得到了前所未有的普及和深入,网络上的各种应用层出不穷,给各个阶层、各个年龄段的用户提供了不同的个性化的服务。
而现代中小型企业的领导认识到进一步提高企业信息化的必要性。
为使企业能在瞬息万变的信息时代生存下去,适应激烈的市场竞争,现代企业要求正加员工之间的交流和通信能力,尤其是领导和员工之间的共同能力,实时的交流系统就是在这种条件下诞生的。
系统开发是一个十分复杂的系统工程。
这里对系统开发的基本过程和方法进行介绍,列出相关文档的示例并加以说明。
要提高市场竞争力,就要对市场作充分的调查和详细的研究,同时也要有好的客户服务。
企业要在复杂的环境下作出对策。
员工与员工员工与领导间的即时交流尤为重要,网络在线聊天系统对于企业来说就是一种交流和通信的平台,本系统能够成为中小型企业的交流通信的理想平台。
如能做到信息的及时的反馈,即时的处理并作出相应的行动,将能进一步提高中小型企业在现代经济市场的竞争能力。
网络通信是网络应用的重要体现方面。
网上即时通信则是网络应用的重要体现方面。
本聊天系统主要应用于小型企业,学校或小型局域网内部使用。
本应用程序使短距离交流更加快捷和便利。
更能高效率的体现现代即时通信的特点。
本系统能够满足中小型企业,学校的内部网络即时通信的需要,在内部网络正常环境的运营下,提供即时通信的能力,本系统使用VisualC++开发,本系统能够为中小型企业协同工作,相互间的交流提供了有力的工具,运用在局域网的本系统,能够为企业员工的交流提供帮助,有利于提高工作效率。
第一章VisualC++及Socket套接字介绍
一VisualC++介绍
和其他编程工具相比,VisualC++在提供可视化编程方法的同时,适应于编写直接对系统进行底层操作的程序.其生成代码的质量,也要优于许多其他开发工具.
VisualC++所提供的MFC(Microsoft基本类库),对Window98/NT/2000所用的Win32API(应用程序接口)进行了彻底的封装,这使得可以使用完全的面向对象的编程方法来进行Windows程序的开发,并能够大大缩短程序的开发周期,降低开发成本,把Windows程序员从大量复杂的劳动中解放出来.
VisualC++给应用程序的开发人员提供了丰富的功能,VisualC++通过MFC库提供了一个完整的应用程序的骨架,开发人员可以忽略应用程序的入口点和结束地点,并且可以忽略消息在应用程序的流动顺序,通过MFC的支持VisualC++也提供了Document-View(文档视图)的应用程序的结构,开发人员可以将数据保存在Document类的对象上,而在屏幕的显示的数据由View类的对象来负责。
通过MFC的支持VisualC++也实现了面向对象领域的RTTI(RunTimeTypeInformation运行时类型识别)、DynamicCreation(动态创建)、(Persitence)永久保存机制,同时他也实现了Windows下的MessageMapping(消息映射)和CommandRouting(命令传递),通过MFC的Cdatabase和Crecordset类VisualC++可以实现数据库的应用,通过ChtmlStream、CHttpFilter、CHttpFilterContext、ChttpServer等ISAPI(InternetServerAPI)可以很好的支持Internet上的http协议相关的操作。
由于MFC涉及到应用程序开发的各个领域,其VisualC++成为倍受欢迎的开发工具。
二Socket套接字介绍
Winsock是一套开放的,支持多种协议的Windows下网络编程接口,是Windows网络编程实是上的标准.应用程序通过调用Winsock的API实现相互间的通信,而Winsock利用下层的网络通信协议功能和操作系统调用实现实际的通信工作.
1套接字(Sockets)
套接字是通信的基石,是支持TCP/IP协议的网络通信的操作单元.可以将套接字看作不同主机间的进程进行双向通信的端点,它构成了单个主机内及整个网络间的编程界面.套接字存在于通信域中.通信域是为了处理一般的线程通过套接字通信而引进的一种抽象概念.套接字通过通常和同一个域中的套接字交换数据(数据交换也可能穿越域的界限,但这时一定要执行某种解释程序).Winsock规范支持单一的通信域,即Internet域.各种进程使用这个域互相之间用Internet协议簇来进行通信(Winsock以上的版本支持其他的域)。
套接字可以根据通信性质分类,这种性质对于用户时可见的.应用程序一般仅在同一类的套接字间通信.不过只要底层的通信协议允许,不同类型的套接字间也照样可以通信
进入九十年代后,随着计算机和网络技术的发展,很多数据处理系统都采用开放系统结构的客户机/服务器网络模式,即客户机提出任务请求,通过网络发送给服务器,由服务器做相应处理,执行被请求的任务,然后将结果返回给客户机。
例如:
银行ATM的前置机和数据处理的主机之间即构成客户机/服务器网络模式;
电话银行的前置机和银行数据处理机之间也构成这种网络模式结构等。
这样,如何在前置机和数据主机之间进行信息交换,即进程网络通信,就成为实现这种网络模式的基础。
而TCP/IP的套接字技术是解这一问题的有力工具。
它从提出时就一直发挥着愈来愈重要的作用,并已成为UNIX操作系统下TCP/IP网络编程标准;
甚至WINDOW、JAVA都配有它的通用接口。
有了这个强有力的工具,我们可以实现异种机、异种操作系统应用程序间的相互连接和通信。
套接字(sockets)是支持TCP/IP协议的网络通信的基本操作单元。
可以将套接字看作不同主机间的进程进行双向通信的端点。
它构成了在单个主机内及整个网际间的编程界面。
一般来说,跨机应用进程之间要在网络环境下进行通信,必须要在网络的每一端都要建立一个套接字,两个套接字之间是可以建立连接的,也是可以无连接的,并通过对套接字的“读”、“写”操作实现网络通信功能。
类似于UNIX系统中的I/O概念,像文件那样有打开、读、写、关闭的方式。
根据传输数据类型的不同,套按字可分为面向连接的数据套接字(streamsockets)和无连接的数据报套接字(datagramsockets)两种类型:
(1)字节流套接字
字节流不按记录定界,在TCP/IP协议簇中对应TCP协议,即传输控制协议(TransmitionControlProtocol)。
它是一个提供给用户进程可靠的全双工的面向连接的协议,大多数INTERNET应用程序如ftp、telnet使用TCP协议。
通信端点使用TCP对应的INTERNET地址互相连接,可保证按正确的顺序以及单一和可靠的地址传输数据。
由于它是字节流,所以包长包没有限制,信包传输也不重复,因而是一种常用的套接字类型。
流套接字提供双向的,有序的,无重复并且无记录边界的数据流服务,它适应于处理大量数据.网络传输层可以将数据分散或集中到合适尺寸的数据包中。
流套接字是面向连接的,通信双方进行数据交换之前,必须建立一条路径,这样即确定了它们之间存在的路径,又保证了双方都是活动的,可彼此相应的,但在通信双方之间建立一个通信信道需要很多开支.除此以外,大部分面向连接的协议为保证发送无误,可能会需要执行额外的计算机来验证正确性,为此会进一步增加开支。
(2)数据报套接字
数据报对应记录型数据流,在TCP/IP协议簇中对应UDP协议,即用户数据报协议(UserDatagramProtocol)。
利用数据报服务可实现一些简单的网络服务,如网点检测程序PING。
由于不建立连接,数据报协议比连接协议快。
但不能保证所有数据都准确有序地到达目的地。
不保证顺序性、可靠性和无重复性。
它是无连接的服务,以独立的信包进行传输,通信端点使用UDP对应的INTERNET地址。
双方不需互连,按固定的最大长度进行传输,因而适用于单个报文传输,或较小文件的传输。
数据报套接字支持双向的数据流,但不保证数据传输的可靠性,有序性,和无重复性.也就是说,一个从数据报套接字接受信息的进程有可能发现信息重复,或者和发出时间顺序不同的情况.此外,数据报套接字的一个重要特点是它保留了记录边界。
数据报套接字是无连接的,它不保证接受端是否在监听,类似邮政服务:
发信人把信装入邮箱即可,至于收信人是否收到这封信或邮局是否会因为暴风雨未能按时将信件投入收信人处等等,发信人都不得而知.因此,数据报并不十分可靠,需有程序员负责管理数据的排序和可靠性)。
2套接字的编程要点及过程
不论何种套接字编程,均采用客户机/服务器方式,其运作过程基本类似,限于篇幅,这里仅介绍字节流套接字。
字节流套按字的服务进程和客户进程,在通信前必须创建各自的套接字以建立连接,然后对相应的套接字进行“读”、“写”操作,实现信息的交换。
服务器进程创建套接字。
服务进程总是先于客户进程启动,服务进程首先调用socket()函数创建自已端的一个字节流套接字,并提供三个参数:
网络地址类型,一般取AF_INEF(AdressfamilyInterNET);
套接字类型,这里取SOCK_STREAM;
网络协议,缺省为TCP/IP协议,对应参数为0。
给套接字地址变量赋初值。
在生成套接字后,要用服务器的地址先对sockaddr_in结构变量赋初值。
sockaddr_in它只适用INTERNET地址类型,含有INTERNET套接字地址类型、IP端口号、IP地址等信息。
地址类型可取定为AF_INET,IP地址对服务器可取任意合法地址INADDR_ANY。
IP端口号可由用户设定,但要注意主机字节顺序向网络字节顺序的转换。
给套接字命名。
由socket()函数创建的套接字是没有名字的。
所谓命名,就是用bind()函数将服务器地址捆绑到创建的套接字上。
服务器进程准备接受来自客户机的连接请求。
首先调用listen()函数,让服务器进程进入监听状态;
然后调用accept()函数,准备接受客户机的连接信号。
无连接请求时,服务进程被阻塞。
客户进程调用socket()函数创建已端的套接字。
给客户端的sockaddr_in结构体变量赋值。
地址类型仍可取AF_INET,端口号和服务器方的端口号相同,欲连服务器的地址通过调用inet_addr()转换得到。
也可通过gethostbyname()函数将名字转换为指向hostent结构变量的指针,再将hostent结构变量的地址成员用bcopy()复制到sockaddr_in结构变量上。
客户方调用connect()函数向服务进程发出连接请求。
当连接请求到来后,被阻塞服务进程的accpet()函数生成一个新的字节流套接字,并返回客户机的sockaddr_in结构变量,从而在服务器应用程序中用新的被赋予客户机地址的套接字同客户进程进行连接,然后向客户方返回接受信号。
一旦客户机的套接字收到来自服务器的接受信号,则表示客户机与服务器双方已实现连接。
任一方均可向对方发送,也可接收对方发来的数据。
这既可通过send()、recv()函数来实现。
也可通过read()、write()函数来交换数据。
服务进程和客户进程可通过调用shutdown()和colse()关闭套接字上的所有发送和接收操作,撤销套接字并中断连接
3基本概念
(1)带外数据
带外数据,也称为TCP紧急数据,它是相连的每一对流套接字间的一个逻辑上独立的传输通道,带外数据是独立于普通数据传输给用户的,这一抽象要求带外数据设备必须支持每一时刻仅有一个带外数据信息等候发送。
对于仅支持带外数据的通信协议来说(例如紧急数据是与普通数据在同一序列发送),系统通常把紧急数据从普通数据中分离出来单独存放。
这就允许用户可以在顺序接受紧急数据和非顺序接收紧急数据之间作出选择。
(2)广播
数据报套接字可以用来向许多系统支持的网络发送广播数据包。
要实现这种功能,网络必须支持广播功能。
为此系统软件并不提供对广播功能的任何模拟。
广播信息将会给网络造成极重的负担,为此它们要求网络上的每台主机都为他们服务,所以发送广播数据包的能力被限制于那些用显式标记了允许广播的套接字中。
广播通常应用于以下两种情况:
●一个应用程序希望在本地网络中找到一个资源。
而应用程序对该资源的地址又没有任何先验的知识。
●一些重要功能,例如路由要求把它们的信息发送给所有可以找到的邻机。
被广播信息的目的地址取决于这一信息将在何种网络上广播。
Internet域中支持一个速记地址-INADDR_BROADCAST用于广播。
由于使用广播以前必须绑定一个数据包套接字,所以所有收到的广播消息都带有发送者的地址和端口。
(3)字节顺序
不同的计算机有时使用不同的字节顺序存储数据。
例如,基于Intel处理器的计算机和Macintosh计算机使用了相反的字节排序顺序。
Intel的字节顺序被成为“Little-Endian”,它与网络的字节排序顺序“Big-Endian”排序顺序相反。
任何从Winsock函数对IP地址和端口号的引用和传送给Winsock函数的IP地址和端口号均是按照网络顺序组织的,这也包括了sockaddr_in这一数据结构中的IP地址域和端口域
考虑到一个应用程序通常用与“时间”服务对应的端口来和服务器连接,而服务器提供某些机制来通知用户使用另一端口。
为此getservbyname函数返回的端口已经是网络顺序了,可以直接使用来组织成一个地址,而不需要进行转换。
然而如果从主机顺序转换成网络顺序。
相应地,如果应用程序希望显示包含于某一地址中地端口号,则这一端口号就必须在被显示前从网络顺序转换到主机顺序。
(4)阻塞和非阻塞
套接字可以处于阻塞模式或非阻塞模式。
调用任何一个阻塞模式地函数,都回产生相同地后果-耗费或长或短地时间等待操作地完成。
而当套接字处于非阻塞模式时,API函数的调用会立即返回,大多数情况这些调用都回“失败”,并返回一个WASEWOULDBLOCK的错误,它意味着请求的操作在调用期间没有时间完成。
Winsock的套接字I/O模型可以帮助应用程序判断一个套接字何时可供读写.
套接字的行为在Windows9X和WindowsNT中与在Windows中不同.在32位操作系统中,可以采用多线程编程,在不同的线程中使用套接字,这样即使某个线程中的套接字被阻塞,也不会影响应用程序的其他操作,同时也不会在阻塞线程上耗费CPU时间。
(5)Winsock编程原理
进入20世纪90年代后,随着计算机和网络技术的发展,很多数据处理系统都采用开放系统结构的客户机/服务器(Client/Server)网络模型,即客户机向服务器提交请求,服务器对请求做相应的处理兵执行被请求的任务,然后将结构返回给客户机。
这种方式隐含了在建立客户机/服务器间通信是的非对称性。
客户机/服务器模型工作时要求有一套为客户机和服务器所共识的惯例来保证服务能够被提供(或被接受),这一套惯例包含了一套协议,它必须在通信的两头都被实现。
根据不同的实际情况,协议可能是对称的或非对称的。
在对称的协议中每一方都有可能扮演主从角色;
在非对称协议中一方被不可改变地认为是主机,而另一方则是从机。
一个对称协议地例子是Internet中用于终端仿真地Telnet,而非对称协议地例子是Internet中的http。
无论具体的协议是对称的或是非对称的,当服务被提供时必然存在客户进程和服务进程。
一个服务程序通常在一个众所周知地地址监听客户对服务地请求,也就是说,服务进程一直处于休眠状态,直到一个客户对这个服务地址提出连接请求。
在这个时刻,服务程序被“惊醒”并且为客户提供服务-对客户地请求作出适当的反应。
这一请求/响应的过程可以简单地用以下图表表示,虽然基于连接地服务器应用程序时的标准,但有时服务也可以通过数据报套接字提供。
(6)MFCWindowsSocket类
VisualC++对众多的socket函数进行了封装,MFC提供的封装类是:
CAsyncSocket和CSocket类,它们使编程工作变得相对简单尤其是CSocket类:
●CAsyncSocket类所提供的唯一的抽象就是将与套接字相联系的Windows消息以回调函数的形式表示,因此它带来的唯一方便就是程序员无需自行处理Winsock的I/O模型,而对于如阻塞处理、字节顺序差异以及Unicode等依然负有责任并有灵活的控制权。
●CSocket类是CAsyncSocket类的派生类,它提供了对通过Carchive对象使用套接字工作的更高级抽象。
CSocket类的使用比CAsynCSocket类更加容易,它继承了CAsyncSocket类的许多封装了API的成员函数,并且管理了通信的大多数方面,这使得用户从原来不得不使用原始API或者CAsyncSocket类的烦杂的工作中解脱出来。
更加重要的是CSocket和Carchive类提供了对于同步操作Carchive对象十分重要的阻塞功能,且CSocket通过与CSocketFile和Carchive一起使用来管理对象数据的发送和接收,使发送数据和操作变得简单明了。
以下使CSocket对象与串行化技术及CSocket类的编程模型。
第二章软件需求分析
一系统客户要求
需求分析是软件分析中的一个重要步骤。
它的基本任务是要准确地分析出系统应用者的需要,以及系统目标必须具备哪些功能。
这些功能必须准确地,完整地体现出用户的要求
根据网络应用程序的特点,网络在线聊天系统应就有即时,快速的特点。
服务器端和客户端应就有不同的功能特性。
对于服务器端应能够正确地建立与客户端的连接并能正确地断开,能即时地接收、处理和发送接收到的数据。
能及时地通知在线用户当前好友在线状况,能够处理非正常数据的能力。
对于客户端应能够快速地检查是否能够连接到服务器端。
能正确的获得和反映当前好友在线情况。
能够正确的与特定好友交流。
能及时地接收到服务器端地数据,并能即时处理数据,并能将处理结果反映给用户。
服务器端:
●能够正确地、无冲突地启动服务器。
●监听指定的端口,等待用户的连接。
●建立与客户端的逻辑连接,并能通知其他好友。
●向新进入的好友发出已上线的好友名单。
●接收客户端的消息请求,并能正确无误地处理消息,并能发出消息到客户端。
●反映当前在线人数和在线好友状况。
●及时地反映发出地消息和聊天消息。
●当好友断开与服务器端地连接时,服务器能够正确地断开连接,并通知其他用户。
●当用户违反聊天系统规定时,服务器系统管理员能够断开与此用户的连接。
●当服务器关闭时,应通知所有用户。
客户端:
●能够正确启动应用程序,并能向服务器发出连接请求。
●反映当前好友在线情况。
●能够向群体或指定好友发出消息
●能够及时接收好友发出消息,并通知用户。
●能够正确地断开与服务器端地的连接。
二系统详细设计
对现行管理业务进行了详细调查研究,了解了系统需求和进行了系统分析与设计工作。
对员工进行全面、细致而充分的调查研究和到生产和管理的现场去,并通过座谈、询问后,自上而下逐步细化的进行了了解,调查的内容涉及到企业的发展目标、经营管理情况,通过系统流程图中的部分图形工具来描述管理业务活动,进行规范化说明。
流程图如下:
三系统开发目标
1实时好友登陆当好友登陆或离开聊天室,服务器端有能力通知所有其他在线用户。
2收发消息同步当一用户向其他的好友发出消息,发送接收端的用户应能及时接收到消息。
3服务器关闭通知当服务器因故障或维护需要暂时关闭,应有通知在线用户的能力。
4隐私消息模式当用户选择发送消息为私聊的模式。
其他在线用户不能看到此条消息。
四系统开发思路
尽量采用公司现有的硬件环境,及先进的管理系统开发方案,从而达到充分利用公司现有资源,提高系统开发水平和应用效果的目的。
1.系统应符合员工日常的规定,满足公司日常工作需要,并达到操作过程中的直观、方便、实用、安全等要求。
2.系统采用C/S模型。
服务器端和客户端均使用VisualC++并使用Sockets模型开发实现
3.系统采用模块化程序设计方法,既便于系统功能的各种组合和修改,又便于未参与开发的技术维护人员补充和维护。
五需求的总结
首先,经过和用户的讨论将系统要实现的功能列出来。
主要模块有登陆模块、连接模块、发送消息模块和接收和处理模块。
其