基于CS架构的网络聊天室设计与实现Word下载.docx
《基于CS架构的网络聊天室设计与实现Word下载.docx》由会员分享,可在线阅读,更多相关《基于CS架构的网络聊天室设计与实现Word下载.docx(34页珍藏版)》请在冰豆网上搜索。
![基于CS架构的网络聊天室设计与实现Word下载.docx](https://file1.bdocx.com/fileroot1/2022-11/21/45abbb54-b5f8-42c4-b12d-c516bad68ced/45abbb54-b5f8-42c4-b12d-c516bad68ced1.gif)
2014年05月10日
摘要
互联网聊天服务系统与传统的电子邮件和电话交谈相比,是更有效的,实时的和快速的。
随着计算机科学与技术和Internet(互联网)的飞速发展,各种网络聊天工具已成为人们相互学习交流沟通的一种方式。
这个程序采用软件工程的开发方法,结合使用了网络技术、以及程序设计技术,并使用VisualC++6.0作为开发工具,使用TCP/IP协议下的一个套接字连接局域网聊天室的开发。
这个网聊天室采用传统的客户端与服务器(C/S)架构和TCP连接方法实现的,它是由客户(C)端和服务器(S)这两个模块组成的一个系统。
聊天室的服务器模块的作用主要是用来维护网络上与用户的信息有关的服务,如用户的登录,消息的转发,用户的信息,用户退出等,聊天室的客户端模块主要包括用户的注册、登录、发送私聊信息、群发消息、接收别人的信息、在线用户列表等。
使用结构化的方法编译整个工程,逐步完善整个系统的各个功能。
系统采用套接口(CSocket)实现客户端与服务器的链接。
这个聊天室系统不仅提供基本的聊天功能,还添加了一些使用的功能,比如注册用户、验证登陆、发送文件和私聊等。
聊天室系统通过测试其操作简单并且灵活性好而且运行稳定。
关键词语:
MFC;
套接字;
TCP通信;
聊天室;
ABSTRACT
NetworkchatservicesystemcomparedwiththetraditionalE-mailandtelephone,chatisthemoreefficient,real-timewitheffective.WiththequicklydevelopmentofthecomputerscienceandthetechnologyandtherapiddevelopmentoftheInternet(Internet),allkindsofnetworkchattoolhasbecomeawayofpeopletolearnfromeachothercommunication.ThisprogramUSESthedevelopmentmethodofsoftwareengineering,jionwiththenetworkprogrammingtechnology,andtechnology,usingMicrosoftVisualc++6.0asdevelopmentinginstrument,usingtheTCP/IPprotocolunderasocketconnectionforthedevelopmentofLANchatroom.
ThenetworkchatroomUSEStraditionalclientandserver(C/S)architectureandTCPconnectionmethod,itisbythecustomer(C)theclientandserver(S)ofthetwomodulesofasystem.Theroleofthechatroomservermoduleismainlyusedtomaintainthenetworkwiththeuser'
sinformationservices,suchasuserlogin,theforwardingofamessage,theuser'
sinformation,theuserexit,suchaschatroomclientmodulemainlyincludestheuserregister,login,privatechatmessages,massmessage,receiveotherpeople'
sinformation,suchasonlineuserlist.Structuredmethodisusedtocompilethewholeproject,thevariousfunctionsofthewholesystemtoconsummategradually.
SystemUSESsetofinterfaceoftheclientandtheserver(CSocketlinks.Thischatroomsystemnotonlyprovidesthebasicchatfunctionality,Alsoaddedlikesomethingfunctions,suchasuserregistration,verifyandsendthefileandprivatechat,etc.Chatroomsystembytestingitseasyoperationandgoodflexibilityandstablerunning.
Keyword:
MFCandThesocketandTCPcommunicationsandChatrooms;
第一章绪论
如今的科技使网络技术越来越发达,人们使用网络也越来越频繁,从而使人们对网络的依赖不断的上升,出现了越来越离不开网络网络的情况,因此产生的聊天工具软件也玲琅满目,比如如,国外的MSN、ICQ,国内的YY语音和腾讯公司开发的微信与QQ等。
由于VC++网络编程技术的功能非常强大,所以我的毕业设计选择使用VC++6.0为开发平台开发一个聊天系统软件。
这个系统建立在微软的VC++6.0平台上,设计系统时不仅使用了C++的面向对象设计技术的(OOD)而且还面向对象的编程(OOP)原则。
这个系统采用传统的客户端/服务器(C/S)结构模型来进行开发,并且客户端和服务器、客户端和客户端之间的通信通过套接口(CSocket)进行的。
使用C/C++语言开发,采用的开发工具为微软的VC++6.0。
第一节论文的目的和意义
最近这写年来以来,随着全球信息技术在不断的飞速发展当中,并且互联网同时也处于快速发展之中。
出于经济、快速、有效地处理各种各样的问题,使用局域网已成为很多企业的优先选择。
在局域网这个平台的帮助下,使企业的信息化流程越来越简单了,而且人与人之间的信息交互加快了,从而提高了每个员工的工作效率。
但是随着各个企业规模的不断发展并扩大,业务量也跟着不断的处于上升阶段,从而造成企业内部信息越来越机密越来越贵重,一旦泄露将造成不可估量的损失,从而使企业只让员工通过使用局域网进行工作的沟通、交流与学习,从而达到避免企业内部商业秘密通过互联网这个网络(Internet)流入到竞争对手或者商业间谍那里去,造成不必要的损失。
为了解决企业与互联网之间的矛盾,各个企业提出了开发只能在公司里面使用的聊天软件的构想,通过开发局域网聊天软件能达到企业的目的,使用局域网聊天软件企业员工不仅可以随时的发送和接收即时消息,而且还可以使用局域网召开会议进行网络交流等,不仅可以提高企业员工的效率同时又对企业的内部信息进行了保密工作措施,从而最大化避免商业信息泄露。
随着市场经济的不断发展,用户对软件的功能需求也越来越高,需求量也越来越大,从而促进了即时通讯的网络产品也不断地进行换代更新,像浪花一样一波又一波的向前推进。
网络即时通讯软件不论是在它的基础应用聊天这方面还是在扩展应用方面的文件发送语音聊天方面的发展都有着很大的进步。
为了各种使用人群的需求,包括移动公司的聊天软件飞信在内得各种即时通讯软件,这些软件呢都推出了包括视频聊天、语音聊天的功能模块方便大家交流。
我的这个课题是基于局域网聊天软件,用C/C++编写的应用程序,程序完成基本的文字聊天模块,可作为一个简单局域网聊天工具。
这个统采用了基于网络编程技术套接口(CSocket)的方法开发并实现了基于局域网聊天的功能,基于局域网软件通信产品很多都是使用套接口(CSocket)实现的,这种软件产品在局域网中使用可以有效的为企业提供一种实时,安全,优良,的信息传递机制。
实现它的功能难度不是很大并且不必要对企业局域网硬件做任何的更新或改动从而为企业减少了很多麻烦,并且这个软件具有实现低成本的优势和条件,它的使用不尽能有效地降低局域网消息传递的负载量而且传递速度快,从而能提高局域网使用的效率,可以很好完成企业对于局域网通信的需求,使企业很好的进行日常事务的处理,进而提高企业工作效率。
基于套接口(CSocket)的局域网聊天软件很好地解释了套接口(CSocket)信息传递的原则,并且在企业的实际应用中都具有很高的价值。
局域网聊天软件的信息发送和接收的速度,带宽低,安全性好,服务器容量较低,易于编程等优点。
基于套接口(CSocket)的局域网通信软件使用的人群非常广,即可以处理一般的文字通信,又能扩展使其适应新兴的网络应用软件,如影音数据传输网络教育等,这些应用都有广泛的前景。
局域网的即时信息传递软件大多数都是采用UDP或者TCP协议来完成信息传递的,这项技术已经非常成熟。
UDP是一种实时的通信协议,但是传输的数据是不可靠的,可能又会数据的丢失,TCP是一种可靠的通信协议,数据传递是有链接的可靠的。
我的这个课题就是采用TCP通信协议完成的一个局域网聊天室的软件程序。
第二节国内外研究现状
当今世界范围内各种聊天室系统软件的公司很多,产品也各种各种各具特色,不过大体都已聊天为中心扩展其他功能,在我们国家有YY、QQ、网易泡泡、新浪UC、默默等产品,国外的有ICQ、Skype、MSN、Facebook等。
在这里我主要取用户最多的两个产品进行研究,国内的为腾讯公司的QQ,国外的为微软MSN,作为开发即时通讯软件的系统的一个模板。
QQ作为国内即通信软件其市场占有率一直无人人能及,自腾讯公司1999年闯入即时通讯领域之后,它迅速占领了国内市场,并且使国内用户一直都是处于最多的状态,没有一丝一毫的动摇迹象。
虽然这几年微软的MSN在我国有发展壮大的趋势,但是腾讯QQ的用户量依然在逐步增长中。
腾讯的即时通讯软件产品的成功是来源于它对QQ这个通信软件的不断更新不断完善从而使QQ一直被使用者称好,这也算QQ这款软件成功的基本原因。
通过阅读许多网络上的书籍,以及自己使用MSN、QQ、YY等通讯软件。
可以肯定的是腾讯的QQ微软的MSN等都是多个服务器同时服务,服务器控制客户端与客户端之间使用UDP协议进行通信。
在两个客户端之间不能建立正常连接的情况下腾讯QQ使用用服务器进行消息的中转以达到通信的目的。
图1.1是我们经常使用的QQ聊天软件的客户端-服务器模
MSN与腾讯QQ不同的是他们使用协议的不同,微软的MSN是使用TCP协议作为传输层通信协议,而QQ使用的UDP作为传输层得通信协议,服务器与所有的登陆在线客户端进行链接,并通过服务器进行消息的中转实现客户端与客户端之间的消息传递。
图1.2微软的MSN客户端-服务器模型
从腾讯QQ的系统模型中我们可以观察到的是,服务器的作用是处理客户端的传递过来的各种状态的请求并进行相应的处理响应,从而达到服务器的压力将到最小值,但是它还是存在着一些缺点,就是服务器客户端之间的的协议和功能实现都比较复杂。
然而微软的MSN一切数据都要进过服务器中转,由此可知道服务器承受的压力是多么的大(所以平时使用MSN进行语音视屏聊天很少)。
上面的软件都实现了在互联网上的即时信息传递,在使用方面都具有自己独特的一面,软件的开发方式也各不相同,但中心思想一致。
伴随着社会的发展企业的扩大,营业额的上涨,各个企业的竞争也越来越激烈,所以企业内的商业信息也越来越机密,为了保护商业机密企业只希望员工通过局域网进行工作的商讨交流与资源的共享,从而避免企业内部商业秘密通过互联网(Internet)泄露到竞争对手手里,从而使局域网的聊天软件也隐藏着很大的用户市场资源。
第三节论文的主要内容
这个课题主要研究的主要方向是使用C/C++语言进行的局域网聊天室软件的开发,该聊天室软件开发过程中采用的是精典客户端/服务器架构和TCP协议的有链接连接方法,完成用户在客户端与客户端间传递文字信息功能。
完成它的功能实现必须要两个程序:
一个是用于消息转发的服务器端程序和另一个是用户间交流的客户端程序,调试程序时首先必须要启动服务器等待客户端消息的请求做,服务器需要一个固定的端口号和一个固定的IP地址使客户端能连接到固定IP地址的服务器并向固定端口发送消息,当客户端与服务器链接时,用户需要注册一个用户名,但是如果用户名已经被其他已经登录过的客户端注册,服务器就会发送信息告诉客户端用户已存在,要求重新注册。
当用户注册成功后可以使用账户进行登录,登陆之后客户端之间可以通过发送文字信息进行聊天或信息交互。
服务器模块主要是显示用户信息消息的转发,和用户登录退出的提示;
客户端的模块主要是文字消息的发送和接收达到聊天的目的,还有文件的发送和接收,在线用户列表的头像和名字显示,老用户的登录和新账户的注册。
研究这个课题的前提的必须有一定的C/C++语言基础,并熟练运用VC++6.0开发平台,利用套接口(socket)网络编程技术并且结合TCP网络协议进行这个局域网聊天软件开发工作。
在这里我选择TCP协议却没有选UDP协议是为了保证可靠的信息传递,TCP与同于UDP协议不同的是,TCP协议往往要求在进行可靠连接后才进行信息的传递。
第一章主要论述了论文的目的和意义,展示了主要的内容和简单的介绍。
第二章主要说明了聊天系统在国内外的发展具体状况,和主流的及时通信软件产品,并且将国内外使用最多MSN聊天软件和国内使用最多QQ都做了简单的介绍并进行了一些简单的对比,以加深我们对及时通信软件的认识。
第三章主要说明了这个软件所需要到的软件开发语言极其使用平台,和简单描述了套接字(CSocket)的发展历程。
第四章介绍了整个系统的设计和和各个模块的作用极其功能。
第五章详细分析了如何实现各个功能极其作用。
第六章对设计过程中可能出现的问题进行可行性分析与总结,分析了整个软件的优点和缺点,并对日后软件的完善埋下了伏笔。
第二章开发环境及编程语言的介绍
第一节VisualC++6.0可视化开发环境
MicrosoftVisualC++6.0是一款可视化编程工具它是微软出品的,它使用的范围非常广阔。
MicrosoftVisualC++6.0这个软件开发平台是由很多部分组成的,它包含一个项目生成工具和一个增量连接器和文本编辑器和资源编辑器和一套在线文档和源代码浏览器,以及集成的调试工具。
使用MicrosoftVisualC++6.0这个开发平台,可以对程序进行各种繁杂的操作,例如程序新建,删除,修改,编译,调试,运行等。
MicrosoftVisualC++6.0开发平台采用传统的多窗口多任务Windows用户界面方便大家学习使用这个平台,也降低了平台使用的复杂度,不仅这样MicrosoftVisualC++6.0开发平台还添加了一些独特的个性化的特征使用方式,从而使开发环境简单易用方便,是我们很快就能学会并且熟练运用。
基于MicrosoftVisualC++6.0的原始身份是一个可视化编程的软件开发平台,在介绍MicrosoftVisualC++6.0的每一个不可或缺部分之初,大家应当了解一下可视化编程是一个怎么样的过程。
可视化编程技术是目前IT界发展最快并且最引人眼球的,它吸引人的地方表现在它能把一些抽象的东西用图像、图形的方式展现给大家。
它的应用之一可视化编程。
我们所将的可视化编程,指的是程序员在开发软件的时候,用我们肉眼可以观察到的具有一定特殊意义的图形,图标,按钮来替换以前我们手动的制作、浏览、运行这些繁杂的操作,使我们从繁重的软件开发表现出来给大家的映像就是按钮的拖拽图形化对象的设置,鼠标的点击以及特定对象的表现出特定属性以及行为的过程和方法,使其体现出可视化编程的最大优点易学易用,效率高。
第二节网络编程
20世纪80年代初期,美利坚政府下的高级工程研究机构颁给加利福尼亚大学BERKELEY分校一比研究经费,目的是让加利福尼亚大学研究出在LINUX/UNIX操作系统完成TCP/IP协议的消息传输机制。
在这个项目中研究人员通过很长一段时间的艰苦钻研为网络通信TCP/IP网络传输协议开发了一个可行的应用程序接口(API)。
并将这个应用程程接口,叫做套接字。
直到现在,在网络传输软件的开发中套接字(Socket接口)依然是TCP/IP网络传输协议中运用最简单使用最频繁的API(应用程序接口),也是互联网(Internet)软件应用开发过程中最为常见的API接口。
单词socket翻译为中文为套接字,对于每一个程序员来说,Socket也可以看成是一个类似于文件指针的指针,只要指向指针所指的地址读写数据,那么他就可以说是实现了双向通信。
基于这个特套接字是网络通信编程运用中的必不可或缺的一部分。
Socket套接字是一个网络互连终点的同时并且可以是被寻址和被命名的网络通信端点,从而看出套接字的作用是多么重要。
用另一句话说,网路互联就是两台不一样的电脑或处理器通过网络相互传递数据的链接过程。
每一个网络会话过程中的通信末端都被网络专业人员叫做网络通信节点。
若使用套接字进行网络接口相互链接,那么每个程序在网络链接的末端都都要提供一个套接字作为接口,套接字接口类似于我们平常看见文件系统一样,可以通过API接口函数在网络中申请一个特定套接字句柄来标记套接字的属性。
虽然说套接口类似与文件系统,但是套接字句柄与文件句柄的意义是不相同的,文件句柄它指向的是一个固定的设备和文件,然而套接字句柄并不是像我们想的那样代表的是一个目标地址或一个特定的终点。
套接字程序的操作顺序是,首先申请一个套接口,其次将目标的终点和套接字连接起来实现通信。
套接字函数的实现是底层的WinInetAPI函数的其中很重要的一部分,如果使用的是MicrosoftVisualC++6.0类库MFC里面的CSocket类的话,MFC里面把套接字底层运用函数封装起来了构成一个类方便了我们调用。
CSocket来源于CAsyncSocket类,它是CAsyncSocket类的子类,由于使用CAsyncSocket类的编程运用到很多底层函数所以使用比较难,它进行通信操作需要编写底层函数这样的操作无疑是大大提高编程的可行性的行为,但是CSocket更抽象的封装底层函数,代替编程者操作难度较大的底层函数,使套接字编程得到简化。
但是又应为其实CSocket类还支持了一个更加高级的,使用简单的Socket运用方法,它熟练的通过运用MFC类库中序列化类的方法并运用完成对Socket对象进行提供和传输。
使用Socket进行的网络编程实现即时通讯方式有两种方法。
一种是需要建立可靠的虚拟连接的形式叫面向连接方式或者流方式。
基于这个链接方式,就是两个需要进行通信的程序在通信之前一定要先进行建立一个虚拟的网络连接环境。
它的过程就像我们平时打电话,你拨打我的手机只有我点接听了,我才能接收到你在那边说话传过来信息,这样的有连接的通信叫做TCP通信协议。
另一种方式叫数据报文,也可以称为没有连接方式,这种通信就像我们平时寄信那样把信息写在纸上然后寄出去,应为寄信要通过不同的邮局不同的邮递员所以在信得传递过程中很可能丢失或残缺不全,但是有时候后面寄出去的信件要寄到同一地点也会先一步到达,它使用的通信协议对应为UDP通信协议。
流方式数据传输特点是可靠的数据传输,对发送的数据总是进行校验,对出错的数据进行重发,一般用于对出错要求比较高的或者说不允许发送错误的数据传输如telnet、ftp、文件等;
数据报文方式应为没有进行校检和数据重发,所以其通信效率一般比较高,一般用于对数据发送完整性不是很高的网络应用,例如语音的传输,文字的传输等。
因为两个客户端之间的通信是使用客户机/服务器的机制,为了数据传输的可靠性,所以采用了基于TCP协议的套接字编程来开发。
第三节客户端/服务器模式
需要进行通信的两个客户端之间的相互联系的模式是客户机/服务器模式,相当于客户端给服务器发送消息,服务器接收到消息后进行数据分析,然后给客户端提供相应的服务。
由于是不同程序之间进行的通信属于网间进程通信是异步的而非同步的,进行通信的程序之间不纯在相互依赖的父子关系,也没有共享相同的内存区间,此时就需要一种通信机制为两个进程建立联系从而实现数据的同步交换,以实现进程间的通信。
服务器/客户机传统的网络应用模式在实际使用过程中使用的方法是主动请求的服务模式:
即服务器要最先启动并且处于一直等待客户端的服务请求状态,并根据接收到的客户端请求作出相应的服务和应答:
1)建立通信通道,并打开通道绑定本地主机IP,并告诉主机愿意在主机IP地址上接收客户服务;
2)一直等待客户端的发送过来的服务请求到达特定IP地址下的服务器特定端口上,除非服务器关闭或出错;
3)根据接收到的服务请求信息,判断客户端需要做怎么样的服务,发送出服务信号作出相应服务,服务完成后关闭连接停止通信;
4)回到第二步继续等待下一个服务;
5)服务器关闭则通信中断。
客户端:
1)建立一个可用的通信线路套接口,并连接到固定主机的固定IP地址和固定端口号的服务器上,才能进行通信;
2)通信连接步骤完成后根据自己的需要向服务器发送服务请求,并等待服务器处理接收到到消息进行相应的服务;
3)接收到服务器应答后关闭通信通道完成通信。
由以上我们知道:
1)服务器与客户端是不一样的,服务器是等待连接,客户端是请求连接,因此在编程实现上必然存在很大差别;
2)由于服务进程是给客户进程服务的所以服务进程必须先于客户进程启动并一直存在等待客户端服务消息,因此只要系统处于运行状态,服务进程必须处于运行状态,直到人为的关闭服务器,或者是因其他原因服务器被强制关闭。
客户端服务器通信的原理图如3所示。
图2.1系统实现原理图
客户端/服务器实现通信我们可以将它简单的分为三个阶段:
一、数据连接套接口的建立。
二、数据的传输,客户端向服务器传输服务请求,服务器处理消息并把处理结果传输给客户端。
三、解除客户端与服务器之间的连接。
在套接字建立的通信的整个过程之间,将用到很多的函数处理不同的消息我们经常用到的函数如下:
(1)AfxSocketInit():
在这个函数AfxSocketInit()之中包装了函数WSAStartup(),通过在应用程序的初始化的功能函数IninInstance()之中我们可以通过调用AfxSocketInit()对相应的变量进行初始化。
(2)Create():
其主要作用是创建套接字,创建套接字可分为本地的和网络的,TCP或UDP的套接字。
(3)Listen():
这个函数创建一个并Socket并为其中申请进入的连接套接口建立一个后备日志报表,方便后期的管理。
(4)Connect():
这个函数主要运用于客户端服务程序的开发,用于向服务器端发送客户端的连接请求,完成连接。
(5)Accept():
这个函数主