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