基于TCP的网络通信协议设计毕业论文.doc_第1页
基于TCP的网络通信协议设计毕业论文.doc_第2页
基于TCP的网络通信协议设计毕业论文.doc_第3页
基于TCP的网络通信协议设计毕业论文.doc_第4页
基于TCP的网络通信协议设计毕业论文.doc_第5页
已阅读5页,还剩61页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

基于TCP的网络通信协议设计毕业论文目录ABSTRACTIV第一章 绪 论11.1 项目开发背景和意义11.2 开发和运行环境2第二章 开发工具简介32.1 Visual C+6.0介绍32.2 MFC32.3 MSDN42.4 Visual Assist X4第三章 协议设计涉及知识简介63.1 即时通讯63.2 网络协议73.3 OSI七层网络模型73. 4 TCP/IP协议83.5 TCP传输83.6 C/S编程模型93.7 Socket套接字103.8 网络字节顺序103.9 Windows Sockets113.10 同步、异步、阻塞和非阻塞123.11 多线程12第四章 需求分析144.1 整体需求分析144.2 可行性分析14第五章 概要设计155.1 性能要求155.2 通讯协议格式设计155.3 软件工作模式图165.4 软件设计原理16第六章 详细设计196.1 协议设计196.2 服务器端工程设计216.3 客户端工程设计266.4多线程设计(一台服务器与多个客户端通信)356.5 协议工作设计38第七章 系统测试467.1 测试目的467.2 测试要求467.3 测试方法467.4 系统测试47总 结59致 谢60参考文献61第一章 绪论第一章 绪 论1.1 项目简介1.1.1 项目开发背景和意义 计算机网络技术的飞速发展,使得人类社会正全面迈向信息化。近几年来,信息网络更是以前所未有的速度不断发展壮大,广泛应用于人类的生产、生活、学习和娱乐等各个领域,极大地促进了人类社会的进步。即时通讯作为目前的主要应用之一,已经极大的融入到我们生活的各个领域。 即时通信是一个终端连往一个即时通信网路的服务。即时通信不同于e-mail在于它的交谈是实时的。大部分的即时通信服务提供了presence awareness的特性显示联络人名单,联络人是否在在线与能否与联络人交谈。 即时通信(Instant Message),由于其具有实时性、跨平台性、成本低、效率高等优点而受到广泛的使用。即时通讯软件的迅速发展已经突破了作为技术工具的极限,被认为是现代交流方式的象征。在网络通讯时,必须选用正确的网络通讯协议,以保证不同连接方式和操作系统的计算机之间可以进行数据传输。如何让通讯双方更决捷有效安全地沟通,就成为大家关心的问题。一个良好的协议设计可以很好的解决这个问题。一个良好的协议设计可以很好的解决这个问题。 我们知道,并且大家也都在用,QQ,微信,飞信,MSN,YY等众多的即时通讯软件,已经成为了目前大家交流必不可少的工具,然而这些聊天工具虽然方便、实用,但是,由于其功能太多,如游戏,社区,电子邮件等功能,占据内存空间过大,从一定程度上来说,更多的已经演变成了一种娱乐工具,不能作为即时通讯的专用工具。签于此,一个简单友好的即时通讯的网络聊天工具的开发就显得必不可少了,而我们知道,网络通讯少不了相应的软件协议的支持,我们本次的设计目标就是设计一个专用于支持内容简单,占用内存小的计算机之间即时通讯的网络聊天协议。 本系统使用当前流行的MFC框架,c+语言编写,采用面向对象的思想设计,基于TCP传输控制协议。切实考虑大众用户的需求,为方便用户之间的沟通,为大家提供了一个简单的用以支持即时通讯的网络聊天协议。 本文首先对本次协议设计所用的开发平台以及开发工具做了简单介绍, 其次又对开发中所用到的知识点做了系列概括,接着是需求分析,在此基础上那个提出了对软件协议设计的设计方案,然后分析了协议的各类型字段,最后讲了该协议的具体实现。 网络协议一直以来作为信息网络的核心支柱之一。近年来,网络的新概念新方法、新技术以惊人的速度不断涌现,软硬件不断升级换代,新的产品和业务更是层出不穷出不穷,令人目不暇接,网络协议更是不断完善,以来更好的为信息化社会服务。不难发现,网络技术如同自然界的生物一样,是一个新旧更替,优胜劣汰的发展过程。陈旧落后的技术不论是网络协议还是其他,必然被新的,更加先进的技术所替代。作为网络工程系的学生,必须在打牢网络理论基础,不断更新学习各种网络新技术的同时,并且能够把学到的理论知识应用于实践中去,以便于深入理解网络体系结构和运行机制,切实掌握各种网络技术的基本原理、软、硬件设计方法和相关协议以及算法。而本次设计就是针对这一目标,结合本人在大学四年的理论学习和各种实践,对网络协议一次模拟设计,及时对本人大学学习情况的考察,也是自己对自己在大学所学知识的一次系统整叠和梳57西安工程大学学士学位论文理,更是对自己的一次锻炼。1.1.2 开发和运行环境 操作系统:Win7编辑和运行平台:Visual C + + 6.0编码语言:MFC协助软件:MSDN, Visual Assist X 第二章 开发工具简介第二章 开发工具简介2.1 Visual C+6.0介绍2.1.1 特色Visual C+6.0由Microsoft开发, 它不仅是一个C+编译器,而且是一个基于Windows操作系统的可视化集成开发环境(integrated development environment,IDE)。Visual C+6.0由许多组件组成,包括编辑器、调试器以及程序向导AppWizard、类向导Class Wizard等开发工具。 这些组件通过一个名为Developer Studio的组件集成为和谐的开发环境。Microsoft的主力软件产品。Visual C+是一个功能强大的可视化软件开发工具。Visual C+6.0以拥有“语法高亮”,自动编译功能以及高级除错功能而著称。比如,它允许用户进行远程调试,单步执行等。还有允许用户在调试期间重新编译被修改的代码,而不必重新启动正在调试的程序。其编译及创建预编译头文件(stdafx.h)、最小重建功能及累加连结(link)著称。这些特征明显缩短程序编辑、编译及连结的时间花费,在大型软件计划上尤其显著。2.1.2缺点由于C+是由C语言发展起来的,也支持C语言的编译。6.0版本是使用最多的版本,很经典。最大的缺点是对于模版的支持比较差。现在最新补丁为SP6,推荐安装,否则易出现编译时假死状态。仅支持Windows操作系统。目前发现与windows 7兼容性不好,安装成功后可能会出现无法打开cpp文件的现象。2.2 MFC2.2.1 MFC简介 MFC(MicrosoftFoundationClasses),是微软公司提供的一个基础类(Microsoft Foundation Classes),以C+类的形式封装了Windows的API,并且包含一个应用程序框架,以减少应用程序开发人员的工作量。其中包含的类包含大量Windows句柄封装类和很多Windows的内建控件和组件的封装类。 MFC应用程序的总体结构通常由开发人员从MFC类派生的几个类和一个CWinApp类对象(应用程序对象)组成。MFC 提供了MFC AppWizard 自动生成框架。Windows 应用程序中,MFC的主要文件为“Afxwin.h”.MFC实际上是微软提供的,用于在C+环境下编写应用程序的一个框架和引擎。VC+是Windows下开发人员使用的专业C+ SDK(SDK,Standard SoftWare Develop Kit,专业软件开发平台),MFC就是挂在它之上的一个辅助软件开发包。MFC作为与VC+血肉相连的部分。只不过MFC类是微软为VC+专配的。MFC是WinAPI与C+的结合。API,即微软提供的Windows下应用程序的编程语言接口,是一种软件编程的规范,但不是一种程序开发语言本身,可以允许用户使用各种各样的第三方的编程语言来进行对Windows下应用程序的开发,使这些被开发出来的应用程序能在Windows下运行。编程语言函数本质上全部源于API,因此用它们开发出来的应用程序都能工作在Windows的消息机制和绘图里,遵守Windows作为一个操作系统的内部实现。MFC是微软对API函数的专用C+封装,这种结合一方面让用户使用微软的专业C+ SDK来进行Windows下应用程序的开发变得容易,因为MFC是对API的封装,微软做了大量的工作,隐藏了好多程序开发人员在Windows下用C+ & MFC编制软件时的大量内节,如应用程序实现消息的处理、设备环境绘图,这种结合是以方便为目的的,必定要付出一定代价,因此就造成了MFC对类封装中的一定程度的的冗余和迂回,但这是可以接受的。 MFC不只是一个功能单纯的界面开发系统,它提供的类绝大部分用来进行界面开发,关联一个窗口的动作,但它提供的类中有好多类不与一个窗口关联,即类的作用不是一个界面类,不实现对一个窗口对象的控制(如创建、销毁),而是一些在Windows中实现内部处理的类,如数据库的管理类等。 Windows作为一个提供功能强大的应用程序接口编程的操作系统,因为API函数实在太多了,而且名称很乱,从零构架一个窗口动辄就是上百行的代码。MFC是面向对象程序设计与Application framework的完美结合,它将传统的API进行了分类封装,创建了程序的一般框架。Windows作为一个提供功能强大的应用程序接口编程的操作系统,因为API函数实在太多了,而且名称很乱,从零构架一个窗口动辄就是上百行的代码。MFC是面向对象程序设计与Application framework的完美结合,它将传统的API进行了分类封装,创建了程序的一般框架。2.3 MSDN2.3.1 msdn 简介MSDN(Microsoft Developer Network)是早期微软在推广Win32 程序设计以及开发工具时,专门为开发人员所提供的一个服务,是使用微软技术开发软件或应用程序时必定会参访的地方,同时它也有提供订阅的服务,由微软不定时供应最新的软件及技术文件,MSDN的技术文件库是免费开放让所有人在联机阅读,但光盘的版本必须要利用MSDN Library Subscription才可以拿到,不过自从Visual Studio 2005开始,MSDN Library即提供免费的网络下载。也许是受到MSDN成功与广为开发人员所知的影响,升阳也将它们的Java文件库定名为Sun Developer Network (SDN)一般情况下,很多人误认为 MSDN 为联机帮助文件和技术文献的集合。但事实上,这两者只占 MSDN 庞大计划的一小部分。产品下载、在线电子教程、MSDN 杂志和技术紧急电话支援是要付费的,其余基本免费。2.4 Visual Assist X 2.4.1 Visual Assist X 简介Visual Assist X是一款非常好的Microsoft Visual Studio 2005和Visual Studio .NET插件,支持C/C,C,ASP,Visual Basic,Java和HTML等语言,能自动识别各种关键字、系统函数、成员变量、自动给出输入提示、自动更正大小写错误、自动标示错误等,有助于提高开发过程的自动化和开发效率。第三章 协议设计涉及知识简介 第三章 协议设计涉及知识简介3.1 即时通讯3.1.1 简介即时通讯(Instant Messenger,简称IM),IM最早的创始人是三个以色列青年,是他们在1996年开发出来的,取名叫ICQ。是一个终端服务,允许两人或多人使用网路即时的传递文字讯息、档案、语音与视频交流。即时通讯按使用用途分为企业即时通讯和网站即时通讯,根据装载的对象又可分为手机即时通讯和PC即时通讯,手机即时通讯代表是短信,网站、视频即时通讯如:米聊、YY语音、QQ、MSN、百度hi、新浪UC、阿里旺旺、网易泡泡、网易CC、盛大ET、移动飞信、企业飞信等应用形式。3.1.2 行业分析据最新的报告显示,2008年中国企业即时通讯市场终端用户规模达到2236万人,与2007年的1813万人相比,同比增长23.3%。已经开始全面入市场,竞争格局也已经初显端倪,主要以高效、稳定和安全作为其产品开发的重点。3.1.3 即时通讯的新发展(1)由PC即时通信向手机客服端转移由PC即时通信向手机客服端转移,具有以下特点:省钱,方便,可靠,超强,够酷,时尚,环保,惊喜,厉害。(2)网页即时通讯新趋势a.论坛、SNS社区:满足论坛、社区的注册用户和游客即时通讯的需求,可以提高用户的活跃度。b.垂直门户、电子商务:满足网站访客进行话题讨论、咨询的需求,可以提高用户停留时间。c.游戏、客户端软件:按需求提供IM定制服务,有效降低IM开发成本。完全基于网页的即时通讯a.无需下载、安装客户端软件。b.聊天记录无论在哪台电脑上都可以查看。c.可以和社区网站无缝结合,进一步提高用户之间的交流互动。3.1.4 安全问题目前,即时通讯的主要挑战是安全,安全威胁包括:ID被盗、隐私威胁、病毒威胁等,下面是即时通讯用户应该遵循的一些安全准则,以保护自身的网络安全和隐私。即时通讯安全准则主要包括:不随意泄露即时通讯的用户名和密码;不在第三方网站登录网页版即时通讯软件;定期更改密码;谨慎使用未经认证的即时通讯插件;在即时通讯设置中开启文件自动传输病毒扫描选项;不接收来历不明或可疑的文件和网址链接。3.2 网络协议3.2.1定义协议是用来描述进程之间信息交换数据时的规则术语义。在计算机网络中,两个相互通信的实体处在不同的地理位置,其上的两个进程相互通信,需要通过交换信息来协调它们的动作达到同步,而信息的交换必须按照预先共同约定好的规则进行。网络协议的定义:为计算机网络中进行数据交换而建立的规则、标准或约定的集合。3.1.2 网络协议是由三个要素组成a.语义:语义是解释控制信息每个部分的意义,它规定了需要发出何种控制信息,以及完成的动作与做出什么样的响应。b.语法:语法是用户数据与控制信息的结构与格式,以及数据出现的顺序。c.时序:时序是对事件发生顺序的详细说明。(也可称为“同步”)。人们形象地把这三个要素描述为:语义表示要做什么,语法表示要怎么做,时序表示做的顺序。3.3 OSI七层网络模型3.3.1OSI七层模型简介OSI网络模型是一个开放式系统互联的参考模型。通过这个参考模型,用户可以非常直观地了解网络通信的基本过程和原理。OSI参考模型如图所示。用户从OSI网络模型可以很直观地看到,网络数据从发送方到达接收方的过程中,数据的流向以及经过的通信层和相应的通信协议。事实上在网络通信的发送端,其通信数据每到一个通信层,都会被该层协议在数据中添加一个包头数据。而在接收方恰好相反,数据通过每一层时都会被该层协议剥去相应的包头数据。用户也可以这样理解,即网络模型中的各层都是对等通信。在OSI七层网络模型中,各个网络层都具有各自的功能,如表所示。各网络层的功能协 议 层 名功 能 概 述物理硬件层表示计算机网络中的物理设备。常见的有计算机网卡等数据链路层将传输数据进行压缩与加压缩网络层将传输数据进行网络传输数据传输层进行信息的网络传输会话层建立物理网络的连接表示层将传输数据以某种格式进行表示应用层应用程序接口%注意:在表1.1中列出了OSI七层网络模型中各层的基本功能概述。用户根据这些基本的功能概述会对该网络模型有一个比较全面的认识。3. 4 TCP/IP协议3.4.1 tcp/ip协议简介TCP/IP协议实际上是一个协议簇,其包括了很多协议。例如,FTP(文本传输协议)、SMTP(邮件传输协议)等应用层协议。TCP/IP协议的网络模型只有4层,包括数据链路层、网络层、数据传输层和应用层,各层功能如下: TCP/IP网络协议各层功能协 议 层 名功 能 概 述数据链路层网卡等网络硬件设备以及驱动程序网络层IP协议等互联协议数据传输层为应用程序提供通信方法,通常为TCP、UDP协议应用层负责处理应用程序的实际用于层协议在数据传输层中,包括了TCP(Transmission Control Protocol)和UDP(User Datagram Protocol)协议。其中,TCP协议是基于面向连接的可靠的通信协议。其具有重发机制,即当数据被破坏或者丢失时,发送方将重发该数据。而UDP协议是基于用户数据报协议,属于不可靠连接通信的协议。例如,当用户使用UDP协议发送一条消息时,并不知道该消息是否已经到达接收方,或者在传输过程中数据已经丢失。但是在即时通信中,UDP协议在对一些对时间要求较高的网络数据传输方面有着重要的作用。3.5 TCP传输3.5.1简介TCP,Transfer Control Protocol的缩写(传输控制协议),是一种面向连接的网络传输协议。TCP协议的特点是,支持多数据流操作,提供流控和错误控制,甚至能完成对乱序到达报文的重新排序等。因此,TCP提供了可靠的应用数据传输服务。3.5.2通信双方使用TCP传输的一般过程如图:3.5.3 TCP协议和UDP协议的区别(1)TCP协议面向连接,UDP协议面向非连接(2)TCP协议传输速度慢,UDP协议传输速度快(3)TCP协议保证数据顺序,UDP协议不保证(4)TCP协议保证数据正确性,UDP协议可能丢包(5)TCP协议对系统资源要求多,UDP协议要求少3.6 C/S编程模型客户机/服务器模型,又称为Client/Server模型,简称C/S架构,是一种非对称式编程模式。C/S计算技术在信息产业当中占有重要的地位。该模式的基本思想是把集中在一起的应用划分成为功能不同的两个部分,分别在不同的计算机上运行,通过它们之间的分工合作来实现一个完整的功能。对于这种模式而言其中一部分需要作为服务器,用来响应并为客户提供固定的服务;另一部分则作为客户机程序用来向服务器提出请求或要求某种服务。 在此“服务器”是指能在网络上提供服务的任何程序。服务器接受网络上的请求,完成服务后将结果返回给申请者。对于简单的服务,把每个请求用一个IP数据报发给服务器,服务器用另一个数据报返回响应。客户机和服务器都是独立的计算机。当一台连入网络的计算机向其他计算机提供各种网络服务(如数据、文件的共享等)时,它就被叫做服务器。而那些用于访问服务器资料的计算机则被叫做客户机。严格说来,客户机/服务器模型并不是从物理分布的角度来定义,它所体现的是一种网络数据访问的实现方式。采用这种结构的系统目前应用非常广泛。如宾馆、酒店的客房登记、结算系统,超市的POS系统,银行、邮电的网络系统等。C/S编程模型是基于可靠连接的通信模型。在通信的双方必须使用各自的IP地址以及端口进行通信。否则,通信过程将无法实现。通常情况下,当用户使用C/S模型进行通信时,其通信的任意一方称为客户端,则另一方称为服务器端。服务器端等待客户端连接请求的到来,这个过程称为监听过程。通常,服务器监听功能是在特定的IP地址和端口上进行。然后,客户端向服务器发出连接请求,服务器响应该请求则连接成功。否则,客户端的连接请求失败。C/S编程模型如图所示: C/S编程模型由于客户端连接服务器时,需要使用服务器的IP地址和监听端口号才能完成连接。所以,服务器的IP地址和端口必须是固定的。在这里,向用户介绍部分协议所使用的端口号码。例如,HTTP协议(网页浏览服务)所使用的端口号为80,FTP协议(文本传输)所使用的端口号是21。注意:用户在实际编程中,通信双方的连接以及数据通信均是基于Socket(套接字)进行的。3.7 Socket套接字用户在Windows中编写网络通信程序时,需要使用Windows Socket(Windows套接字)。与Windows套接字相关的API函数称为Winsock函数。在网络通信的双方,均有各自的套接字,并且该套接字与特定的IP地址和端口号相关联。通常,套接字主要有两种类型,分别是流式套接字(SOCK_STREAM)和数据报套接字(SOCK_DGRAM)。其中,流式套接字是专门用于使用TCP协议通信的应用程序中,而数据报套接字则是专门用于使用UDP协议进行通信的应用程序中。3.8 网络字节顺序网络字节顺序是指TCP/IP协议中规定的数据传输使用格式,与之相对的字节顺序是主机字节顺序。网络字节顺序表示首先将数据中最重要的字节进行存储。例如,当数据0x358457使用网络字节顺序进行存储时,该值在内存中的存放顺序将是0x35、0x84、0x57。因为通信数据可能会在不同的机器之间进行传输,所以通信数据必须以相同的格式进行整理。只有经过格式处理的通信数据,才能在不同的机器之间进行传输。3.9 Windows Sockets在MFC类库中,几乎封装了Windows Sockets的全部功能。在本节中,将向用户介绍两个主要的套接字相关类,分别是CAsyncSocket类和CSocket类。3.9.1 CAsyncSocket类在微软基础类库中,CAsyncSocket类封装了异步套接字的基本功能。用户使用该类进行网络数据传输的步骤如下:(1)调用构造函数创建套接字对象。(2)如果创建服务器端套接字,则调用函数Bind()绑定本地IP和端口,然后调用函数Listen()监听客户端的请求。如果请求到来,则调用函数Accept()响应该请求。如果创建客户端套接字,则直接调用函数Connect()连接服务器即可。(3)调用Send()等功能函数进行数据传输与处理。(4)关闭或销毁套接字对象。注意:在MFC中,所有类中均有一个变量m_hWnd表示该类的实例句柄。3.9.2 CSocket类微软的MFC提供了两个类:CAsyncSocket和CSocket,极大地方便了Socket功能的使用。这两个类的继承关系如图: MFC Socket类的继承关系CSocket类派生于CAsyncSocket类。该类不但具有CAsyncSocket类的基本功能,还具有串行化功能。用户在实际编程中,通过将CSocket类与CSocketFile类和CArchive类一起使用,能够很好地管理数据以及发送数据。用户使用该类进行网络编程的步骤如下: (1)创建CSocket类对象。(2)如果创建服务器端套接字,则调用函数Bind()绑定本地IP和端口,然后调用函数Listen()监听客户端的请求。如果请求到来,则调用函数Accept()响应该请求。如果创建客户端套接字,则直接调用函数Connect()连接服务器即可。(3)创建与CSocket类对象相关联的CSocketFile类对象。(4)创建与CSocketFile类相关联的CArchive对象。(5)使用CArchive类对象在客户端和服务器之间进行数据传输。(6)关闭或销毁CSocket类、CSocketFile类和CArchive类的3个对象。3.10 同步、异步、阻塞和非阻塞 同步(synchronous):所谓同步方式,就是发送方发送数据包以后,不等接受方响应,就接着发送下一个数据包。异步(asynchronous):异步方式就是当发送方发送一个数据包以后,一直等到接受方响应后才接着发送下一个数据包。阻塞(Block):指执行此套接字的网络调用时,直到调用成功才返回,否则此套节字就一直阻塞在网络调用上,比如调用StreamReader 类的Readlin ( )方法读取网络缓冲区中的数据,如果调用的时候没有数据到达,那么此Readlin ( )方法将一直挂在调用上,直到读到一些数据,此函数调用才返回非阻塞(Unblock):指在执行此套接字的网络调用时,不管是否执行成功,都立即返回。同样调用StreamReader 类的Readlin ( )方法读取网络缓冲区中数据,不管是否读到数据都立即返回,而不会一直挂在此函数调用上。在Windows网络通信软件开发中,最为常用的方法就是异步非阻塞套接字。平常所说的C/S(客户端/服务器)结构的软件采用的方式就是异步非阻塞模式的。3.11 多线程3.11.1 概念每个正在系统上运行的程序都是一个进程。每个进程包含一到多个线程。进程也可能是整个程序或者是部分程序的动态执行。线程是一组指令的集合,或者是程序的特殊段,它可以在程序里独立执行。也可以把它理解为代码运行的上下文。所以线程基本上是轻量级的进程,它负责在单个程序里执行多任务。通常由操作系统负责多个线程的调度和执行。线程是程序中一个单一的顺序控制流程.在单个程序中同时运行多个线程完成不同的工作,称为多线程.3.11.2 线程和进程的区别在于子进程和父进程有不同的代码和数据空间,而多个线程则共享数据空间,每个线程有自己的执行堆栈和程序计数器为其执行上下文.多线程主要是为了节约CPU时间,发挥利用,根据具体情况而定. 线程的运行中需要使用计算机的内存资源和CPU。3.11.3 多线程处理的优点多线程技术使程序的响应速度更快,因为用户界面可以在进行其他工作的同时一直处于活动状态。 (1)当前没有进行处理的任务可以将处理器时间让给其他任务。 (2)占用大量处理时间的任务可以定期将处理器时间让给其他任务。 (3)可以随时停止任务(4)可以分别设置各个任务的优先级以优化性能。 (5)是否需要创建多线程应用程序取决于多个因素。在以下情况下,最适合采用多线程处理: (6)耗时或大量占用处理器的任务阻塞用户界面操作。 (7)各个任务必须等待外部资源(如远程文件或 Internet 连接)。 3.11.4 线程缺点(1)如果有大量的线程,会影响性能,因为操作系统需要在它们之间切换。(2)更多的线程需要更多的内存空间。(3)线程可能会给程序带来更多“bug”,因此要小心使用。(4)线程的中止需要考虑其对程序运行的影响。(5)通常块模型数据是在多个线程间共享的,需要防止线程死锁情况的发生。3.11.5 线程同步是多线程编程的难点,在多线程应用中,考虑不同线程之间的数据同步和防止死锁。当两个或多个线程之间同时等待对方释放资源的时候就会形成线程之间的死锁。为了防止死锁的发生,需要通过同步来实现线程安全。MFC中线程的同步最常用的四种同步对象:(1)临界区(CCriticalSection)(2)事件(CEvent)(3)互斥量(CMutex)(4)信号量(CSemaphore)10第四章 需求分析第四章 需求分析4.1 整体需求分析随着社会的发展,计算机网络日新月异,人们的交流方式越来越多,传统的交流方式,如:Email,电话等已经受到了挑战,利用网络免费,及时的和好友取得联系已经成为通信的必然趋势。因此出现了QQ,微信等聊天工具。然而这些聊天工具虽然方便、实用,但是,由于其功能太多,如游戏,社区,电子邮件等功能,占据内存空间过大,从一定程度上来说,更多的已经演变成了一种娱乐工具,不能作为即时通讯的专用工具。签于此,一个内容简单,消耗内存小,友好简洁的即时通讯的网络聊天工具的开发就显得必不可少了,而我们知道,网络通讯少不了相应的通信协议的支持,所以设计一个专用于支持计算机之间即时通讯的网络聊天协议就显得必不可少。4.2 可行性分析4.2.1 技术可行性Visual C+ 6.0提供了功能强大的开发平台,编码,调试和运行于一体,使得程序界面的实现简单、快速、标准。MFC提供了简单易用的框架,用其进行前台设计,方便简单。Winsock为Windows网络编程提供了丰富的接口技术,结合多线程技术,使得此处的基于TCP网络编程具有良好的健壮性和强大的可扩展性。同时,MSDN Library为编码提供了大量可直接调用的函数,为编码的是吸纳提供了很大的方便,在MFC编码过程中,Visual Assist X具有代码输入更迅速,错误自动校正,信息获取更加快速,增加了色彩和格式,拼写检查,拓展了基本编辑等功能,具有强大的编辑特色,增强Microsoft开发环境下的编辑能力,提高了生产效率。本软件最后所生成的.EXE可执行文件具有很好的可移植性。4.2.2 经济可行性经济可行性研究主要是预估费用支出和对项目的经济效益进行评价,由于本系统的主要背景是毕业课程设计,不注重直接的经济效益和其后的发展方向,只在注重自身水平和能力的提高,对自身的经济要求也不高,只要有一台能运行Visual C+6.0软件的电脑便可,所以不用考虑到经济问题。4.2.3 运行可行性本系统为一个小型的即时聊天系统,所耗费的资源非常的小,现在一般的电脑无论是硬件还是软件都能够满足条件,因此,本系统在运行上是可行的。综上所述,本系统的设计与开发在技术上和硬件设备上的条件都是满足的,因此,它是可行的。第五章 概要设计第五章 概要设计5.1 性能要求 随着网络的发展,不同的开发商开发了不同的即时通讯的应用协议。为了使通信成功可靠,网络中的同一种即时通讯软件,都必须使用同一语言,不能带有方言。因而必须严格的定义不同用户之间的每个包中每个字节中的每一位。这些协议绝大多数建立在TCP/IP协议族上,约定好通用的通信方式、语义、及数据格式,即即时通讯应用协议。已经开发的众多协议中笔者认为较为成功的当属QQ、微信、淘宝旺旺等。不同的开发商因即时通讯软件的应用重心不同,其协议的侧重点也不同,且绝大多数为厂商保密。本协议的设计旨在开发一开放的、安全的、可扩展的、易于程序开发的即使通讯软件协议。5.1.1在设计即时通讯协议时,笔者认为有几点必须考虑:(1) 协议对下层协议的支持考虑到程序开发者对下层协议选择上有不同的看法,协议设计时必须考虑下层的协议,以便程序开发者根据不同的下层协议运用不同的传输手段。(2)数据的保密由于即时通讯软件的不同需求,开发者可能要对传输的数据进行加密,因此在协议中应该对数据是否加密、加密算法留有标记。本次协议设计未实现这一点。(3) 传输可靠性:由于网络传输的不稳定性,根据经验大于1024byte的包较小于1024byte的包更易丢失,因此在应用层传给传输层的包应小于1000byte,而实际的数据包往往大于1000byte,因此应在协议中留有分篇传输的位.本次设计也未能实现这一点,只是通过限制传输的数据来机械的控制了这一点。(4)协议的通用性与可扩展性:由于无法对新技术的发展有精确的把握应在协议中留有冗余位,以便适应新的应用。(5)协议的简洁高效性:协议的设计不应过于复杂,应给程序员开发程序留有”自由空间”。5.2 通讯协议格式设计5.2.1协议字段设计图示此通讯协议具体格式,包括判断消息属于哪个类型、消息发送者、消息接收者、发送数据、消息长度共5部分,其字节分配如图所示与表示的含义:标识funsender28RecerverID28Connect1024Len数据类型enum(FUN)char char char int含义消息类型发送者接受者发送数据消息长度长度(byte)42828102445.2.2协议字段设计说明西安工程大学学士学位论文(1) fun功能标识定义为枚举类型(enum),占4个byte。用它来声明一组命名的常数,当一个变量有几种可能的取值时,可以将它定义为枚举类型,在win32机器上,枚举类型所占字节数总是4byte,在上面代码片段中sizeof(enum),;sizeof(FUN),sizeof(LOGIN)都是4byte。(2) Fun分别包括LOGIN,LOGOUT,LOGOK,LOGERR,SHAKE,TRANSMIT,SVRSTOP,ERRL。lLOGIN表示用户登录,LOGOUT表示用户退出,LOGOK表示用户登陆成功,LOGERR表示用户登陆失败,SHAKE表示震动,TRANSNIT表示信息传输,SRRSTOP表示服务器停止,ERR表示数据传送出错。(2) senderID是发送者的标识,用以标记信息的来源ID;(3) RecerverID是接收者的标识,用以标记信息的目的ID;(4) Connect是要传输的数据;(5) Len记录了传输数据的长度,用于在服务器端进行简单校验,如果出错,则提醒发送者传输错误,同时直接丢弃接受到的错误数据,否则转发数据给接收者;5.3 软件工作模式图5.4 软件设计原理5.4.1 协议工作编程原理(1) 创建CSocket对象,创建两个CSocket对象,分别为服务器端和客户端的对象,如图:CSocket ServerSocket;CSocket ClientSocket;(2)使用CSocket对象的Create()函数来创建Windows Socket。同时,Create()函数会自行调用Bind()函数将此Scoket绑定到指定的地址上面。例如:ServerSocket.Create(5000); /服务器端需要指定一个端口号ClientSocket.create(); /客户端不用指定端口号(3)对于服务器端,需要这个Socket不停地监听是否有来自于网络上的链接请求,因此需要调用监听函数。例如:ServerSocket.listen();(4)对于客户端,实行连接,例如:ClientSocket.Connect(CString Address,Unsinged int Port);/Address服务器的地址,Port是端口号(5)服务器接受链接。在服务器端用Accept接收俩字客户端的消息。而此时服务器端还需建立一个新的CSocket兑现,用来和客户端进行交流。例如:CSocket Receive;ServerSocket.Accept(Receive);(6)客户端发送消息,例如:ClientSocket.Send( string ,buf );(7)服务器接收客户端送来的消息:ServerSocket.Receive( string ,buf );(8)服务器停止:ServerSocket.Close();5.4.2软件设计原理图Socket(),建立流式套接字,返回套接字句柄sListen。Bind(),关联一本地地址到套接字sListen。Listen(),设置backlog值,进入监听状态。Socket(),建立流式套接字s。建立连接,accept函数返回,得到新的套接字,如sClient。Recv()/send(),在套接字sClient上收发数据,直到完成交换。Closesocket(),关闭监听套接字sListen,服务结束。Closesocket(),关闭套接字s,结束TCP对话。Accept(),等待接受客户连接请求。Closesocket(),关闭套接字sClient。Connect(),将套接字s与服务器连接。Recv()/send(),在套接字上收发数据,直到完成交换。服务器方客户方第六章 详细设计第六章 详细设计6.1 协议设计6.1.1协议设计原理图6.1.2协议字段设计说明(3) fun功能标识定义为枚举类型(enum),占4个byte,共32位。用它来声明一组命名的常数,当一个变量有几种可能的取值时,可以将它定义为枚举类型,在win32机器上,枚举类型所占字节数总是4byte,在上面代码片段中sizeof(enum),;sizeof(FUN),sizeof(LOGIN)都是4byte。(4) Fun分别包括LOGIN,LOGOUT,LOGOK,LOGERR,SHAKE,TRANSMIT,SVRSTOP,ERRL。lLOGIN表示用户登录,LOGOUT表示用户退出,LOGOK表示用户登陆成功,LOGERR表示用户登陆失败,SHAKE表示震动,TRANSNIT表示信息传输,SRRSTOP表示服务器停止,ERR表示数据传送出错。(2) senderID定义为char类型,是发送者的标识,用以标记信息的来源ID;(3) RecerverID定义为char类型,是接收者的标识,用以标记信息的目的ID;(4) Connect定义为char类型,是要传输的数据;(5) Len定义为int类型,记录了传输数据的长度,用于在服务器端进行简单校验,如果出错,则提醒发送者传输错误,同时直接丢弃接受到的错误数据,否则转发数据给接收者;6.1.3 协议设计代码皮片段typedef enum LOGIN,LOGOUT,LOGOK,LOGERR,SHAKE,TRANSMIT,SVRSTOP,ERR FUN;西安工程大学学士学位论文typedef struct NET_PACKFUN fun;char senderID28;char RecerverID28;char Connect1024;int Len;NET_PACK;6.1.4 协议工作方式设计整个协议设计为Comm.h,作为一个类NET_PACK添加到服务器端和客户机端类的设计中,这里有两种方案:(1)只设计一个Comm.h文件,与客户端,服务器端的文件存放在同一路经下,分别添加到服务器端和客户端的类中,由服务器和客户共享一个文件;(2)服务器和客户机各自拥有自己的Comm.h文件,只是Comm.h文件的内容,属性都相同。6.1.5 可靠性控制 本次协议设计中。可靠性采用简单的传输数据长度检验,客户端把长度作为数据包里一个字段Len传送给服务器,服务器接收到数据包后,取出传输数据数(Connect)其长度并与数据包里的Len值作比对,相同则传送给接收者,否则直接丢弃数据包并对发送者提醒传送错误。相关代码如下:(1)客户端传送长度pack.Len=lstrlen(strContent);(2)服务器检验if(pPack-len1!=pPack-len2)DealErr(pPack);(3)服务器错误处理void CDlgTCPSeverDlg:DealErr(NET_PACK *pPack)list:iterator itor;for (itor = CClientSocket:m_listClient.begin();itor != CClientSocket:m_listClient.end();itor+)CClientSocket *pSocket = *itor;if (!pSocket-GetUID().Compare(pPack-senderID)NET_PACK pack;memset(&pack,0,sizeof(NET_PACK);pack.fun = ERR;lstrcpy(pack.Connect,_T(传送出错!);pSocket-Send(&pack,sizeof(NET_PACK);(4) 客户端收到服务器成传送的传输错误提醒void CDlgTCPClientDlg:DealError(const char *Connect) AfxMessageBox(Connect);6.2 服务器端工程设计6.2.1新建工程新建服务器端控制下程序.单击【File】|【New】菜单项,在新建对话框中选择MFCAppWizardexe选项,输入工程名“DlgTCPSever”。如图建立基于对话框的应用程序。在【MFC AppWizard-Step 1】对话框中,选择【Diaog based】单选按钮,如图:为工程添加WinSock支持。在上图中单击【Next】按钮后进入【MFC AppWizard-step2 of 4】对话框,在其中选择复选框【Windows Sockets】后单击【finish】按钮完成向导,如图:设计服务器对话框界面。在新建的工程中打开工作台中的【resource View】选项,单

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论