局域网即时通讯系统的实现算机科学与技术.docx
《局域网即时通讯系统的实现算机科学与技术.docx》由会员分享,可在线阅读,更多相关《局域网即时通讯系统的实现算机科学与技术.docx(31页珍藏版)》请在冰点文库上搜索。
局域网即时通讯系统的实现算机科学与技术
局域网即时通讯系统的实现
LANinstantmessagingsystemisrealized
学生姓名:
指导老师:
所在院系:
网络教育学院
所学专业:
计算机科学与技术
研究方向:
网络通信
2012年2月
摘要
随着计算机科学和Internet的飞速发展,网上聊天已成为人们相互交流的一种方式,与E-mail、电话相比,聊天服务更具有实时性和有效性。
大多数网络通讯都需要借助Internet上的服务器,这就给那些具有大规模内部网络的用户造成了许多问题,如浪费网络资源、遭遇到网络攻击、传播的病毒、破坏防御系统等等。
由于互连网上的网络通讯工具给企业内部信息交流带来了不便,所以为了方便内部网络的用户之间的沟通,需要开发一个基于局域网的信息收发系统的即时通讯工具,实现在内部网络中进行信息的交流。
该软件能够帮助企业在局域网内搭建起自己的聊天系统,避免企业内部员工使用类似QQ等软件泄露内部信息,但是该软件只实现了聊天和传送文件以及抓取屏幕等功能,还有很多不足之处需要改进。
本文提出一个运行于VC平台上的局域网聊天软件的解决方案。
该聊天软件集服务器端和客户端两个模块于一体,可设置为客户端或者服务器端或者两者兼容等模式,提供TCP/UDP两种传输模式作选择。
服了服务器模式主要实现务器的配置和数据的传递;客户端模式主要对服务器端进行通讯。
该软件采用异步套接字的非阻塞模式,并实现对象的序列化和MFC文件对象实现数据的保存。
关键词:
局域网即时通信套接字异步模式
Abstract
Alongwiththehigh-speeddevelopmentofthecomputerscienceandInternet,chattingonlinehasbeenanimportantmethodinourcommunication.ComparingwithE-mailandtelephone,thechat-lineserviceismorereal-timeandeffective.MostnetworkcommunicationsrequirethehelpofserversontheInternet,whichhascausedmanyproblemstotheLarge-scaleinternalnetworkusers,suchasawasteofnetworkresources,networkattacks,viruses,damagedefensesystemsandsoon. Astheinterconnectionnetworkofonlinecommunicationtoolshasbroughtinconveniencetotheenterprise,itisneedtodevelopaLAN-basedmessagingsystemtofacilitateusersandachieve theexchangeofinformation.Thissoftwarecanhelpthecompanytobuildtheirownchattingsysteminthelocalareanetwork,anditalsocanavoidthestaffofthecompanydisclosingtheinsiderinformationbyusingtheothersoftwaresuchasQQ,butthissoftwarehasonlycompletedthebasicfunctionasachattingsystem,soitneedmuchmoreimprovement.
ThisthesisproposesasolutionofaLANchattingsoftwarebasedonC++language,whichisoperatedontheVCplatform.Thischattingsoftwaresettwomodules:
theserverandtheclientinone,.whichcanbeseteitheroneorbothcompatiblewithTCP/UDPtwotransportmodechoices.Theservermodulemainlycompletestheseverdevice’sconfiguration.Theclientmodulewasmainlycommunicatewiththeserver.Thesoftwareusedmodelofnon-blockingasynchronoussockets,AndtoachievetheobjectandMFCseriesdocumentsthepreservationoftheobjectdata.
Keywords:
LAN,Instantmessaging,,Socket,Asynchronousmodle
1前言
1.1选题研究的背景与意义
随着计算机网络日新月异的发展,人们的交流方式越来越多,传统的交流方式,如:
信件、电报、电话等已经难以满足人们的交流要求,在互联网上即时的和好友取得联系,已经成为当今社会人们主流的联系方式。
因此,计算机之间进行即时通讯、发送文件等交流方式已经成为必然潮流。
因此出现了QQ、UC等聊天工具,然而QQ、UC等聊天工具虽然方便、实用,但是,娱乐功能太多,有很多吸引人的娱乐功能,从一定程度上来说,是一种娱乐工具,不能作为用于即时通讯、文件共享的专用工具。
目前,用于实现单一的即时通讯、文件共享的软件实在太少,而且它们中大部分都对远程服务器有非常大的依赖性,没有彻底实现点对点的交流。
为此,我们决定开发一个专用于实现基于局域网内部计算机之间即时通讯、文件传输的软件,以方便内网计算机之间信息的交流。
本软件属于点对点连接的,在连接并通信时,尤其是近程的即时通讯,彻底的脱离了远程的服务器,避免了和远程服务器连接时过多的浪费网络资源。
并且避免了服务器忙或与服务器无法连接时,浪费过多时间用于和服务器建立连接。
本系统采用基于Socket的局域网通信工具的设计与实现的方法。
基于Socket的局域网通信软件可以为企业原有的局域网提供一种良好,安全,快速的通信机制。
它的实现无需对企业原有的局域网硬件进行任何改动,具有实现成本低廉的优点,它的使用能有效地降低局域网通信负荷,提高局域网的使用效率,可以很好地解决企业内部局域网的各种通信需求。
基于Socket的局域网聊天工具很好地诠释了Socket通信的原理,并且在企业内部通信、教学、讨论等应用中都具有一定的实用价值。
它具有信息收发速度快,保密性好,占用网络带宽资源低,占用服务器吞吐能力低,易于编程实现等优点。
基于Socket的局域网通信软件应用范围广阔,不但可以处理传统的通信需求,而且也能扩展以适应新型的网络应用,如网络教育,数据影音传输等,拥有广泛的应用前景。
1.2系统的研究现状
基于局域网的即时通信工具,实际上是互联网即时通信工具的一个小规模版本,广域网上的即时通信工具,如今一般采用UDP或者TCP协议体系来实现,开发技术已经比较成熟,比如较早的ICQ,MSNMessenger,Yahoo。
除了这些国外开发的产品,还有国产的有名的QQ,新浪UC,LAVA-LAVA等,这些工具统统都实现了广域网上的即时通信,尽管都是即时通信,实现了即时聊天,以及文件传输的主要功能,但是也各有各的特色,比如ICQ的巨大客户群,MSN的个性化表情,YAHOO通的易操作性等。
而QQ也具有一个相当方便的屏幕截图功能,另外就是,所有上述软件都实现了网络即时的视频,语音聊天功能。
这些软件,在使用方面各有特色,在实现方面也各有所长,但基于这些产品正在商业运营阶段,其实现方式属于商业机密,具体细节不一定得知,但是它在大的方面无非就是各种利用各种平台上的网络通信接口,建构基于下层TCP/IP,或者UDP协议的软件产品。
1.3系统内容与目标
本课题主要研究的是局域网聊天软件,此聊天软件分为服务器程序和客户端程序,本课题的目标是能实现用户在客户端与服务器端传递文字信息。
主要研究开发内容是:
熟悉C++和VC的操作,搭配系统开发平台,探索在此开发平台下,利用socket编程技术、多线程开发技术、TCP、UDP协议等进行局域网聊天软件的实际开发。
1.4系统综述
现在,多渠道的信息源、网络化的数据分布、快捷医用的交互操作、智能化的分析决策等特点越来越成为衡量有两聊天软件的关键,因此,本人开发一个局域网聊天软件,该聊天软件是基于C++语言运行于VC平台上,利用的技术主要是Socket通信,使用配置文件作为数据管理。
为实现和方便客户端间通信,在客户端进行了人性化的界面设计,用户可以注册号码,登陆界面,具有发送离线消息功能。
第1章对本次课题的背景及意义、课题现状、课题内容与目标进行了深入的阐述。
第2章介绍了系统的开发环境和关键技术,例如Socket编程技术,非阻塞开发模式等等。
第3章是系统分析与设计。
将对系统进行需求分析,对组成系统的功能模块进行划分,对每个模块将要实现的功能进行阐述和说明。
对系统的结构进行设计,设计共享数据结构。
第4章是系统实现,分别介绍了服务器端和客户端每个功能的执行过程,画出主要模块的流程图。
第5章介绍系统测试。
最后,对本设计进行归纳总结,全面阐述本次设计中的体会。
2系统开发环境和关键技术
2.1面向服务的体系结构
本设计是一个面向中小型机构内部通信需求的局域网即时信息软件,要在短时间内开发出来并且要满足客户要求,无论是硬件还是软件都要选择合适,要求如下:
开发设备应该完备;开发机器的性能必须稳定;操作系统的选择应该适当;开发出的程序可以在尽可能多的平台上运行;要求运行机配置尽可能低档。
对此,我们选择的硬件环境和软件环境如下:
硬件环境
处理器:
IntelPentiumPIII或更高处理器
内存:
256MB或更高
网络:
局域网
开发该系统应尽可能采用高档的硬件。
因此,在应用时应采用更好的配置。
软件环境
操作系统:
Windows2000/WindowsXP/Windows2003
开发平台:
MicrosoftVisualC++6.0
开发语言:
C++
2.2关键技术
2.2.1VisualC++和面向对象程序设计
VC基于C,C++语言,主要由是MFC组成,是与系统联系非常紧密的编程工具,它兼有高级,和低级语言的双重性,功能强大,灵活,执行效率高,几乎可说VC在Windows平台无所不能[2]。
从20世纪70年代第一次提出面向对象的概念开始,到现在面向对象技术发展成为一种比较成熟的编程思想,通过面向对象技术,可以将现实世界直接影射到对象空间,从而为系统的设计和开发带来革命性的影响。
VisualC++是一个典型的面向对象程序的设计语言,它也是目前为止功能最强、最受欢迎、应用最广泛、高效的Windows应用程序开发工具,它是在C语言基础之上发展起来的,是C语言的超集。
VisualC++是功能最为强大可视化开发工具,它不仅支持传统的软件开发方法,更重要的是它能支持面向对象、可视化的开发风格。
因此VisualC++又称作是一个集成开发工具,它提供了软件代码自动生成和可视化的资源编辑功能。
VisualC++具有的优点:
提供了面向对象的应用程序框架MFC(MicrosoftFoundationClass),简化了程序员的编程工作,提高了模块的可重用性;提供了基于CASE技术的可视化软件的自动生成和维护工具AppWizard、ClassWizard、VisualStudio、WizardBar等,实现了直观、可视的程序设计风格,方便地编和管理各种类,维护程序的源代码;封装了Windows的API函数、USER、KERNEL、GDI函数,简化了编程时创建、维护窗口的许多复杂的工作[3]。
2.2.2MFC
MFC,微软基础类(MicrosoftFoundationClasses),实际上是微软提供的,用于在C++环境下编写应用程序的一个框架和引擎,VC++是WinDOS下开发人员使用的专业C++SDK(SDK,StandardSoftWareDevelopKit,专业软件开发平台),MFC就是挂在它之上的一个辅助软件开发包[1],MFC作为与VC++血肉相连的部分(注意C++和VC++的区别:
C++是一种程序设计语言,是一种大家都承认的软件编制的通用规范,而VC++只是一个编译器,或者说是一种编译器+源程序编辑器的IDE,WS,PlatForm,这跟Pascal和Delphi的关系一个道理,Pascal是Delphi的语言基础,Delphi使用Pascal规范来进行Win下应用程序的开发和编译,却不同于Basic语言和VB的关系,Basic语言在VB开发出来被应用的年代已经成了Basic语言的新规范,VB新加的Basic语言要素,如面向对象程序设计的要素,是一种性质上的飞跃,使VB既是一个IDE,又成长成一个新的程序设计语言),MFC同BC++集成的VCL一样是一个非外挂式的软件包,类库,只不过MFC类是微软为VC++专配的。
2.2.3WINDOWSSOCKETS网络编程接口
选定WINDOWS平台开发网络通信程序,可以选择WINDOWS的SOCKETS编程接口,WindowsSockets是一套开放的、支持多种协议的Windows下的网络编程接口[12]。
现在的Winsock已经基本上实现了与协议无关,你可以使用Winsock来调用多种协议的功能,但较常使用的是TCP/IP协议。
Windowssockets无疑是我们进行网络编程的利器。
所有的WindowsSockets实现都支持流套接口和数据报套接口。
应用程序调用WindowsSockets的API实现相互之间的通讯。
WindowsSockets又利用下层的网络通讯协议功能和操作系统调用实现实际的通讯工作。
它们之间的关系如图1所示:
图1WindowsSockets实现通讯工作的各层关系图
2.2.4TCP/IP协议、TCP协议
网际协议IP是TCP/IP的心脏,也是网络层中最重要的协议。
IP层接收由更低层(网络接口层例如以太网设备驱动程序)发来的数据包,并把该数据包发送到更高层---TCP或UDP层;相反,IP层也把从TCP或UDP层接收来的数据包传送到更低层。
IP数据包是不可靠的,因为IP并没有做任何事情来确认数据包是按顺序发送的或者没有被破坏。
IP数据包中含有发送它的主机的地址(源地址)和接收它的主机的地址(目的地址)[15]。
如果IP数据包中有已经封好的TCP数据包,那么IP将把它们向‘上’传送到TCP层。
TCP将包排序并进行错误检查,同时实现虚电路间的连接[7]。
TCP数据包中包括序号和确认,所以未按照顺序收到的包可以被排序,而损坏的包可以被重传。
UDP与TCP位于同一层,但对于数据包的顺序错误或重发。
因此,UDP不被应用于那些使用虚电路的面向连接的服务,UDP主要用于那些面向查询---应答的服务.
TCP和UDP服务通常有一个客户/服务器的关系。
两个系统间的多重连接是这样相互确认并协调一致的,TCP或UDP连接唯一地使用每个信息中的如下四项进行确认:
源IP地址发送包的IP地址。
目的IP地址接收包的IP地址。
源端口源系统上的连接的端口。
目的端口目的系统上的连接的端口。
端口是一个软件结构,被客户程序或服务进程用来发送和接收信息。
一个端口对应一个16比特的数。
服务进程通常使用一个固定的端口,例如,SMTP使用25[8]。
这些端口号是“广为人知”的,因为在建立与特定的主机或服务的连接时,需要这些地址和目的地址进行通讯,如图2所示。
图2面向连接的(TCP)连接过程
2.2.5Client/Server结构(客户机/服务器模式)
Client/Server结构(C/S结构)是大家熟知的客户机和服务器结构[3]。
通过它可以充分利用两端硬件环境的优势,将任务合理分配到Client端和Server端来实现,降低了系统的通讯开销。
目前大多数应用软件系统都是Client/Server形式的两层结构。
C/S结构软件分为客户机和服务器两层,客户机不是毫无运算能力的输入、输出设备,而是具有了一定的数据处理和数据存储能力,通过把应用软件的计算和数据合理地分配在客户机和服务器两端,可以有效地降低网络通信量和服务器运算量[9]。
由于服务器连接个数和数据通信量的限制,这种结构的软件适于在用户数目不多的局域网内使用。
C/S结构的优点是能充分发挥客户端PC的处理能力,很多工作可以在客户端处理后再提交给服务器。
对应的优点就是客户端响应速度快。
缺点主要有以下几个:
只适用于局域网。
而随着互联网的飞速发展,移动办公和分布式办公越来越普及,这需要我们的系统具有扩展性。
这种方式远程访问需要专门的技术,同时要对系统进行专门的设计来处理分布式的数据。
3系统分析与设计
3.1系统分析
聊天交流是目前互联网提供的主要内容。
聊天系统有多种实现方式,类似ICQ属于一种点对点的聊天系统;还有一种是基于Socket的集中式聊天系统,这种聊天系统需要登陆统一的聊天服务器。
在基于Socket的聊天系统中,主要有两种角色:
服务器和客户端,不同的客户端登陆集中式的服务器,通过服务器将一个客户端发出的信息推送到其他所有客户端[4]。
基于Socket的聊天系统最早实现是使用网页刷新方式,通过客户端不断地自动刷新,服务器端整个页面内容下载到客户端显示,这种方式的聊天速度慢,而且有刷屏现象,很快被更新的聊天技术所替代。
聊天系统在客户端和服务器之间主要传送的是文字信息,服务器端只需要把最近的文字信息推送到客户端,这样减少了网络传输内容,节省了网络传输的时间,无疑提高了聊天速度。
这种“推”技术是目前基于Socket聊天系统的主要实现技术。
在基于Socket的聊天系统,客户端和服务器必须保持随时随地的连接。
这有别于普通Web浏览的连接方式。
在使用浏览器访问服务器时,先由客户端发出HTTP协议,然后服务器响应处理这个客户端的响应,再返回处理结果;请求(Request)和响应(Response)是一种一对一的前后因果关系。
而在基于Socket的聊天系统中,客户端发出聊天信息的同时,客户端也在接受服务器发送过来的其他人的聊天信息,因此,请求和响应不存在那种前后对应关系,是两种分别独立进行的进程。
因为服务器任何时候都可能发送信息到客户端,因此,客户端和服务器一旦建立连接,必须能让服务器在以后发送中寻找定位到这个连接。
局域网聊天系统使该系统的用户能够通过客户端登入到该系统,然后直接与系统交互[11]。
首先,需启动服务器,进行服务器的配置,进行正确的服务器配置和数据库连接并测试成功后,开启服务器。
接下来,在客户端,该系统的用户能够通过登陆界面进入,然后直接与系统交互,进行文字传送。
本系统支持的活动列表如下:
配置服务器,设置IP;
开启服务器;
用户客户端与服务器连接;
用户与系统交互,进行文字传送;
用户与系统交互,进行文件传送;
用户与服务器交互,捕捉其他用户界面;
用户客户端与服务器端断开连接;
该聊天程序分为服务器端和客户端两个部分。
客户端实现功能:
向在线主机发送消息并接收消息。
更新成员状态。
客户端及时刷新网内其他主机在线状况。
更新成员列表,当某主机被断开连接时,客户端及时刷新列表。
向某成员主机传送文件。
接收某成员主机传送的文件并保存。
捕捉成员主机的屏幕界面。
服务器端实现功能:
维护成员列表:
包括接受新连接,剔除旧连接。
通知客户端更新成员状态。
通知客户端更新成员列表。
验证客户端IP。
禁止已登陆用户再次登陆。
为用户客户端传送信息。
为用户客户端传送文件。
关系图如图3所示:
图3关系功能图
3.2系统设计
3.2.1设计原则
考虑到系统的可重用性和伸缩性,需要将本系统的网络通信底层和应用系统分离开。
这样,基于可重用的网络通信层,可以实现其他各种实时性较高的应用系统。
本系统在架构设计上将分4个层次,如图4所示。
图4架构层次
本系统最底层是Socket通信层,将负责客户端和服务器之间快速的数据交换,它通过接口层和最上面应用层保持实时数据联系。
用户从客户端进入到本系统前,将实现统一的用户登录验证机制。
Socket底层设计分两大部分:
协议设计和连接处理设计:
协议设计和连接处理设计;CSocket层的目的是提供底层和应用蹭一个中介媒体的作用,但是不能设计得太复杂,以免延误数据传送时间。
3.2.2工作流程
只有充分地了解了聊天程序的工作流程,才能对整个系统的理解更加深刻,聊天程序的工作流程如图5所示。
图5工作流程
3.2.3功能设计
局域网聊天系统以局域网内的用户为应用对象,经过各方面需求分析,该系统主要由服务器端和客户端两部分构成,各功能模块如图6所示。
图6功能模块图
3.2.4共享数据类设计
A.用户设计:
1.用户状态设计
客户端与服务器端都拥有成员列表。
该程序将成员列表设计为三种状态
登陆状态:
当用户登陆服务器事,设置用户状态为登陆状态,服务器根据该用户列表状态发送成员列表。
在线状态:
用户在线,当两个用户都在线时,可以相互发送和接受成员列表。
离线状态:
当用户离线时,不能发送和接受消息。
在线用户之间可以直接发送消息;对离线离线用户需要服务器转发。
转发关系如图7所示。
在线用户发送消息
在线用户给离线用户发送消息
图7转发关系图
2.用户类设计
在程序中声明CUserInfo信息类。
在该类中声明USERSTATUE枚举类型,描述用户状态。
ONLINE:
在线状态
OFFLINE:
离线状态
LOGIN:
登陆状态
UNKNOWN:
未知状态,初始化状态。
成员函数如表1CUserInfo成员函数,类成员变量如表2所示。
表1成员函数
函数名称
返回值
功能
CUserInfo()
无
构造函数
CUserInfo(constCUserInfo&userInfo)
无
复制构造数
~CUserInfo()
无
析构函数
Init()
Void
初始成员变量
Serialize(CArchive&ar)
void
序列化
Operator=(constCUserInfo&userInfo)
CUserInfo&
赋值函数
B.数据包类设计
在程序中声明CChatPacket类描述服务器和客户端接收和发送的数据包。
在该类中声明PACKETTYPE枚举类型。
MESSAGE:
客户端发送的消息
TFILE:
传送的文件信息
SERVERMSG:
服务器发送的消息
UNKNOWN:
未知类