




已阅读5页,还剩31页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
学科分类号:_08_本科生毕业设计题目(中文):基于Visual C+6.0的点对点文件传输实现 (英文):Design and Realization of Point-to-Point Files Transfer with Visual C+6.0 学生姓名: 学号 系 部: 专业年级: 2 指导教师: 职 称: 目 录摘 要I关键词IAbstractIKey wordsI第一章 绪论11.1 选题背景11.2 文件传输的主要方式11.3 课题研究意义3第二章 TCP/IP技术与C/S模式42.1TCP/IP技术42.1.1 TCP/IP体系结构42.1.2 TCP/IP特点52.1.3 TCP/IP传送文件机制62.3 客户机/服务器模式7第三章 Winsock网络程序设计技术83.1 Winsock简介83.2 Winsock通信机制93.3 Winsock编程模型113.3.1 建立一个Socket113.3.2 配置一个Socket113.3.3 使用Socket12第四章 系统方案设计144.1B/S 结构与C/S结构的选择144.1.1 B/S结构与C/S结构144.1.2 C/S模式的采用154.2 文件传输协议的比较164.2.1 早期文件传输协议的研究比较164.2.2 HTTP协议传输文件的方式174.2.3 FTP文件传输协议的研究184.3 建立新的利用套接字方式的通信协议18第五章 系统详细设计205.1 系统总体设计205.2系统功能模块设计215.2.1 服务器模块215.2.2 客户端模块255.2.3 界面显示模块26致谢28参考文献29基于Visual C+6.0的点对点文件传输实现摘 要:近年来,随着Internet 的发展和普及,人们对网络传输的需求量越来越大,远程教育、网络会议等众多新兴软件的产生,对大文件的传输问题提出了挑战。传统的大文件传输通常在客户端建立一个较大的Buffer缓冲区,这样不仅会大量占用系统资源,而且传输的速度十分缓慢,不能实时地显示传输进度。由于传输的时间比较长,期间发生中断或计算机重启等意外的可能性非常高。本文件传输系统的设计选用VC+6.0为开发工具,以C/S模式通过建立Socket连接后实现局域网快速,准确,安全的点对点文件传输功能。本系统能够促进局域网内用户之间的文件资源共享,满足主机之间信息交流,确保文件传输安全性,有效地提高工作效率。关键词:套接字,网络编程,C/S模式,TCP/IPDesign and Realization of Point-to-PointFiles Transfer with Visual C+6.0Abstract:In recent years, with the development and popularization of Internet, there is a growing demand for network transmission. Distant education,web conference, and many other new softwares are come into being. It gives the large challenges to transmission of large files on the issues.Traditional files transfer is usually establish a larger buffer in the client, so that it will occupy many system resources and result very slow speed of files transfer, so it also can not be displayed in the real-time transmission progress. Transfer files for long time may cause some accidents such as interrupting or restarting the computer.The system with the Visual C+6.0 establishs a socket connection in local area network based on C/S mode for a fast,exact and safe way to tansfer files of point-to-point. The system can contribute to share resources in the LAN, meet the demand of exchanging the information between the host, make sure it is safe to transfer files, improve the work efficiency in effect.Key words:Socket; Network Programming; C/S Model; TCP/IP第一章 绪论1.1 选题背景在这个信息化时代,计算机网络技术的迅猛发展影响了几乎包括政治、文化、生活、经济在内的每一个角落,推动了人类社会向信息化社会的逐步转变;同时我们也应该清醒地认识到文件传输的问题是计算机网络发展过程中的一个不容忽视的问题。在如今拥塞的网络上,各种数据在争夺着网络资源,如何使传输的文件更加可靠的到达目的地,同时如何友好的解决文件分类分组高效传输等问题都是需要有待提高和完善的地方。1.2 文件传输的主要方式在网络环境下,文件传输方式主要有:文件传输协议方式(FTP)、远程拷贝方式(RCP)、套接字方式(Socket),利用HTTP协议传输方式,利用标准XMODEM协议传输方式,利用XMODEM CRC协议传输方式,利用XMODEM 1K协议传输方式,利用YMODEM ODME批传输协议传输方式,利用YMODEM G协议传输方式,利用ZMODEM批量传输协议传输方式,利用Kemti协议传输方式1。传统方式下,利用FTP协议进行文件传输最为普遍,这种方式的优点是适用面广、使用简单、不需要用户编制额外的应用软件(一般集成在操作系统或者网络协议中);其缺点是在广域网上传输大文件时可靠性较低、不支持断点续传,因而对大文件和传输精度要求很高的应用不适合。下面是FTP协议的发展历程:1971年,第一个FTP的RFC(RFC 114)由A.K.Bhushna在1971年提出,同时由MIT与Harvard实验实现。1972年,RFC 172提供了主机间文件传输的一个用户级协议。1973年2月,在长期讨论(RFC 265,RFC 294,RFC 354,RFC 385,RFC 430)后,出现了一个官方文档RFC 454。1973年8月,出现了一个修订后的新官方文档RFC 542。确立了FTP的功能、目标和基本模型;当时数据传输协议采用NCP。1980年,由于底层协议从NCP改变为TCP,RFC 765定义采用TCP的FTP。1985年,一个作用持续至今的官方文档RFC 959(STD9)出台。文件传送协议FTP(FileTransferProtoeol)是Internet文件传送的基础,通过该协议,用户可以从一个Internet主机向另一个Internet主机拷贝文件。FTP曾经是Internet中的一种重要的交流形式。目前,我们常常用它来从远程主机中拷贝所需的各类软件,与大多数Internet服务一样,FTP也是一个客户机及服务器系统。用户通过一个支持FTP协议的客户机程序,连接到在远程主机上的FTP服务器程序。用户通过客户机程序向服务器程序发出命令,服务器程序执行用户所发出的命令,并将执行的结果返回到客户机。利用TCP或者UDP提供的套接字直接在服务器和客户机之间进行文件传输的优点是实现过程可以由应用程序开发者直接控制,因而灵活性很高,缺点是编程复杂,可靠性完全依赖于应用程序开发者。标准XMODEM协议是最早开发的文件传输协议,因而也是最常用的。由于它历史悠久并被普遍采用,几乎所有的远程系统都支持标准XMODEM协议,事实上,很多协议都是在它的基础上发展起来的,标准XMODEM协议用128字节/块来发送数据。XMODEM CRC协议与标准XMODEM协议相同,但包括CRC(循环冗余校验),以进一步降低检测不到的错误的概率;除了数据是以更大的速率1024字节/块外,XMODEM 1K与XMODEM CRC完全一样,增大数据块可以提高总的传输速度,因为传输块大则需要的应答块数就少。YODEM批传输协议和ZMODEM协议支持文件的分组传输,而YODEM G协议具有校正功能。Kemrti协议可以做许多调整,具有许多特性,因而常被选作IBM大型机或者DECVAX系统的协议。在文件(信息)的最优传输设计问题中,减少文件的传输时间(接通时间),对提高工作效率有重要的现实意义。目前常用于解决文件最优传输问题的优化方法主要是寻找关键路径方法和贪婪算法,两类方法都是基于运筹学方法给出的,计算规模大,很难得到问题的量化结果,所以文件传输的遗传优化算法随之被提了出来。算法给出了文件传输问题的边着色模型。遗传算法是一种借鉴生物界自然选择和进化机制发展起来的高度并行的、随机搜索算法,具有自适应性,为了求解文件传输问题,在引入一种新的自适应性的交换概率和变异概率的基础上,提出了一种面向求解文件传输问题的遗传算法。随着文件(信息)的最优传输设计方案设计的不断进步与完善,网络中的中转设备,例如路由器就能更有效率的选择下一步的最优传输路径,以能够节省尽可能多的时间,再加上文件传输协议的辅助作用,那么将会极大的提高传输双方的工作效率。1.3 课题研究意义本课题的价值体现在通过本课题的研究,对专用的文件分组上传系统采用了一套比较行之有效的方案,包括采用最新的加密标准来保证文件传输的安全,摒弃FTP传输系统分组上传文件时直接操作服务器目录的不安全方式,将文件分组功能转移到客户端从而提高了系统的安全性,为了满足特定需求,建立了应用层上专用的通信协议从而极大的方便了客户端与服务器端的通信,采用了最新的代理协议Socket来实现文件的透明传输等等,这个方案可以为其它专用传输系统的研究开发提供参考,在应用价值上则能够方便用户的操作,提高工作效率。第二章 TCP/IP技术与C/S模式2.1TCP/IP技术TCP/IP是Transmission Control Protocol/Internet Protocol的简写,中文译名为传输控制协议/互联网协议2,是当今世界上最广而不基于任何特定硬件平台的网络通信协议。采用TCP/IP可以解决异种机联网和异种网互连的问题,并可以访问当今世界上最有影响力的Internet网。TCP/IP协议的基本思想是通过网间连接层将各种不同的网络连接起来,在各个网络的底层协议之上构造一个虚拟的大网,使用户与其他网的通讯就像与本网的主机通讯一样方便实现,这一思想的相关协议有TELNET、FTP、SMTP、TCP、UDP、IP、ICMP、ARP、RARP等。2.1.1 TCP/IP体系结构TCP/IP协议实际上就是在物理网上的一组完整的网络协议。其中TCP是提供传输层服务,而IP则是提供网络层服务。TCP/IP包括以下协议(结构如图2-1所示):IP: 网间协议(Internet Protocol) 负责主机间数据的路由和网络上数据的存储。同时为ICMP,TCP,UDP提供分组发送服务。用户进程通常不需要涉及这一层。ARP:地址解析协议(Address Resolution Protocol)此协议将网络地址映射到硬件地址。RARP:反向地址解析协议(Reverse Address Resolution Protocol)此协议将硬件地址映射到网络地址。ICMP:网间报文控制协议(Internet Control Message Protocol)此协议处理信关和主机的差错和传送控制。TCP:传送控制协议(Transmission Control Protocol)这是一种提供给用户进程的可靠的全双工字节流面向连接的协议。它要为用户进程提供虚电路服务,并为数据可靠传输建立检查。(注:大多数网络用户程序使用TCP)。UDP:用户数据报协议(User Datagram Protocol)这是提供给用户进程的无连接协议,用于传送数据而不执行正确性检查。FTP:文件传输协议(File Transfer Protocol)允许用户以文件操作的方式(文件的增、删、改、查、传送等)与另一主机相互通信。SMTP:简单邮件传送协议(Simple Mail Transfer Protocol)SMTP协议为系统之间传送电子邮件。TELNET:终端协议(Telnet Terminal Procotol)允许用户以虚终端方式访问远程主机。HTTP:超文本传输协议(Hypertext Transfer Procotol)。是用于从WWW服务器传输超文本到本地浏览器的传送协议。它可以使浏览器更加高效,使网络传输减少。TFTP:简单文件传输协议(Trivial File Transfer Protocol)。它是TCP/IP协议族中的一个用来在客户机与服务器之间进行简单文件传输的协议,提供不复杂、开销不大的文件传输服务。2.1.2 TCP/IP特点TCP/IP协议的核心部分是传输层协议(TCP、UDP),网络层协议(IP)和物理接口层,这三层通常是在操作系统内核中实现3,因此用户一般不涉及。编程时,编程界面有两种形式:一、是由内核心直接提供的系统调用;二、使用以库函数方式提供的各种函数。前者为核内实现,后者为核外实现。用户服务要通过核外的应用程序才能实现,所以要使用套接字(Socket)来实现,图2-2就是反映TCP/IP协议核心与应用程序的关系。2.1.3 TCP/IP传送文件机制下面以采用TCP/IP协议传送文件为例,说明TCP/IP的工作原理4,其工作流程如下: (1)在源主机上,应用层将一串应用数据流传送给传输层。 (2)传输层将应用层的数据流截成分组,并加上TCP报头形成TCP段,送交网络层。 (3)在网络层给TCP段加上包括源、目的主机IP地址的IP报头,生成一个IP数据包,并将IP数据包送交链路层。(4)链路层在其MAC帧的数据部分装上IP数据包,再加上源、目的主机的MAC地址和帧头,并根据其目的MAC地址,将MAC帧发往目的主机或IP路由器。 (5)在目的主机,链路层将MAC帧的帧头去掉,并将IP数据包送交网络层。 (6)网络层检查IP报头,如果报头中校验和与计算结果不一致,则丢弃该IP数据包;若校验和与计算结果一致,则去掉IP报头,将TCP段送交传输层。(7)传输层检查顺序号,判断是否是正确的TCP分组,然后检查TCP报头数据。若正确,则向源主机发确认信息;若不正确或丢包,则向源主机要求重发信息。 (8)在目的主机,传输层去掉TCP报头,将排好顺序的分组组成应用数据流送给应用程序。这样目的主机接收到的来自源主机的字节流,就像是直接接收来自源主机的字节流一样。2.3 客户机/服务器模式20世纪90年代以来,客户机/服务器(c1ient/sevrer)模式得到了十分迅速的流行与发展。几乎每个新的网络操作系统和每个新的多用户数据库系统都声称能够支持C/S模式。实现C/S模式允许有许多不同的策略。从数据库管理系统的应用来看,在LAN上采用的C/S模式6,即指在LAN中至少有一台数据库服务器(DBMSseryer),可以作为希望去存取公共数据库的各台工作站的后援支持。把应用任务中的程序执行内容划分为两个部分:与数据库存取有关的部分由DBMSesvrer承担,与应用的人机界面处理、输入/输出或一部分应用的逻辑功能等有关的内容由c1ient端工作站承担7。这样做的好处大致有:(1)充分调动在LAN中的server与client两方面的处理能力。(2)极大的减少网络上的的信息流通量(可不再以整个文件为传送单位,采用请求一服务响应的方式,网上仅传输经server加工处理后的那一部分必要的结果信息)。(3)有效的发挥了服务器软硬件执行效率高、集中管理数据库安全方面的长处,也可以充分利用PC机c1ient端处理用户界面的(特别是图形用户界面)和本地I/0的优点。(4)C/S体系结构有可能提供一种开放式的、易于伸缩扩展的分布式计算环境,并保护硬件等投资。近年来已经普遍采用了三层方式的C/S模式,采用三层C/S模式的好处是:(1)可以更方便、更清晰地分工应用软件的设计任务。(2)可以降低对客户机的要求,使客户机只需处理人机界面为主的工作,适应日益扩展的应用需求。(3)防止客户机上有权连接数据库的用户绕过系统中的客户端应用系统,利用自行安装在客户机上的数据库访问工具非法访问某些未授权的数据,从而保证了安全性(由功能服务器负责)。(4)避免了在客户机上分发应用程序与版本控制上的困难。对于文件传输系统来说,采用客户机/服务器模式能够方便用户进行操作从而提高工作效率。第三章 Winsock网络程序设计技术3.1 Winsock简介为了方便网络编程,Microsoft联合了其他几家公司共同制定了一套WINDOWS下的网络编程接口6,即Windows Sockets规范,它不是一种网络协议,而是一套开放的、支持多种协议的Windows下的网络编程接口。现在的Winsock已经基本上实现了与协议无关,你可以使用Winsock来调用多种协议的功能,但较常使用的是TCP/IP协议。Socket实际在计算机中提供了一个通信端口,可以通过这个端口与任何一个具有Socket接口的计算机通信。应用程序在网络上传输和接收的信息都通过这个Socket接口来实现。Winsock规范定义了一套可使网络程序开发人员在Windows下开发标准的TCP/IP网络程序接口,它不仅包含人们所熟悉的Berkeley Socket风格的库函数,还包含了一组针对Windows的扩展库函数,以使程序员能充分地利用Windows消息驱动机制、异步网络事件选择方式进行编程。Winsock规范定义并记录了任何使用API与Internet通讯协议(ISP通常指TCP/IP)连接9。应用程序使用Windows Sockets的API,而Windows Sockets又利用下层的网络通信协议与操作系统以产生实际的通信,它们之间的关系如下图3-1所示。 3.2 Winsock通信机制 应用程序的网络通信归根结底是利用相同的通信协议来完成信息的传输,应用程序和Winsock都工作在Windows的用户模式下,操作系统仅仅通过Winsock是不能完成网络间的通信4,还需要底层的支持,而套接字仿真器(套接字核心模式驱动程序)和传输驱动程序接口(Transport Driver Interface,TDI)是负责操作系统核心态环境下的网络通信,起到了Winsock和传输协议之间的通信桥梁作用。如图3-2所示,Winsock是网络通信应用程序于套接字仿真器间的接口,TDI是套接字仿真器和传输协议间的接口套接字核心模式,驱动程序复杂连接和缓冲区管理,以便向应用程序提供套接字仿真(在AFDSYS文件中实现),同时负责与底层传输驱动程序对话传输驱动程序接口(TDI)负责核心模式驱动程序与传输协议间的通信。当应用程序利用Winsock发送和接受数据时,并不是由Winsock从网络上发送和接收数据的,而是由核心模式驱动程序AFDSYS负责管理发送和接收缓冲区来发送和接收数据6。也就是说,当应用程序调用send或WSASend函数来发送数据时,AFDSYS将把数据复制进他自己的发送缓冲区,然后send后WSASend函数立即返回AFDSYS在后台负责把数据发送出去,远程客户端接收数据的情况也类似,由接收方的AFDSYS在后台负责把数据复制到自己的接收缓冲区,然后当应用程序调用recv后WSARecv函数来接收数据时,把数据由AFDSYS管理的接收缓冲区复制到应用程序提供的缓冲区中。 AFDSYS管理的发送缓冲区SO-SNDBUF和接收缓冲区SO-RCVBUF在缺省时两个缓冲区的大小都为8192个字节,但可以根据实际要求由应用程序设定,由于我们传输的对象可能是大数据量文件,因此需要对系统的发送缓冲区和接收缓冲区作相应的设定,以保障大数据量的文件数据的发送和接收。Sockets的实质是通信端点的一种抽象,它提供一种发送和接受数据的机制。根据通信性质不同可分为:Stream Sockets(流式套接字)和Datagram Sockets(数据报套接字),如图3-3所示为这两种套接字的基本通信方式。其中Stream Sockets提供无差错的、面向连接的、无长度限制的双向字节流传输,适应于处理大量数据,尤其适合于FTP服务。Datagram Sockets支持双向的数据传输、但传输过程中不能保证可靠性和无差错性;本设计的程序设计中选择Stream Sockets来完成C/S模式的通信,保证能够数据准确、无误的传输。3.3 Winsock编程模型3.3.1 建立一个Socket为了建立Socket,程序调用Socket函数如下:Sockethandle=Socket(“协议簇”,“Socket类型”,“协议”);Winsock函数含有三个参数,“协议簇”参数指明像TCP/IP协议组这样的一组相关协议,“Socket类型”参数指明参数指明程序是进行数据报传输还是字节流传输,“协议”参数定义了协议族内程序欲使用的具体协议(如TCP或UDP)。由于编程时必须指定程序使用的协议簇,因而能够为使用不同协议组和地址格式的网络建立相同的接口。也就是说,本函数的正确调用可使Winsock接口运行在多个网络上。下面语句显示了一个典型的具体Winsock函数调用:Sockethandle=Socket(PFINET,SOCKSTREAM,IPPROTOTCP);这个Winsock使用Internet协议簇(PFINET)的TCP协议(IPPROTOTCP)进行字节流(SOCKSTREAM)通信。当程序调用Winsock函数建立一个新Socket时,Winsock将为一个内部数据结构分配内存,此结构中保存有关此Socket的信息。3.3.2 配置一个Socket程序可使用Winsock中不同的函数来配置一个Socket。每个Socket需要五种信息:本地和远地本机的IP地址、本地和远地进程的协议端口、连接使用的协议。面向连接的协议在连接端点之间建立一条虚电路,面向连接的客户程序不必关心网络软件使用怎样的本地地址传输数据。建立好连接后,客户程序依靠TCP协议给它传送数据。因此面向连接的客户程序不需指明本地协议端口,它提供给Socket的唯一地址信息是远地服务器信息(IP地址和协议端口)。Winsock自动保存本地IP地址和选择本地协议端口,并确保客户程序收到传输层送给本地协议端口的所有数据。也就是说,Winsock为程序选择协议端口,当数据到达此端口时通知程序,程序不必关心Winsock使用哪一个协议端口。在前一步已建立的Socket基础上,面向连接的客户程序使用connect函数来配置Socket。result=connect(“Socket句柄”,“远地Socket地址”,“远地Socket地址”);此时,内部数据结构就包含了网络通信必须的五种信息。只有面向连接的客户进程才启动与远地服务器Socket的直接连接。无连接协议不建立与远地服务器的直接连接。使用无连接协议的客户程序必须发送一个带有服务请求的数据报并等待应答,远地服务器的应答以数据报的形式到达。Winsock用bind函数给Socket指定一个本地IP地址和一个协议端口,其典型调用如下:result=bind(“Socket句柄”,“本地Socket地址”,“本地Socket地址长度”); 服务器程序使用bind函数用Winsock登记一个协议端口,程序告诉Winsock监视哪一个协议端口的数据传送,Winsock接着告诉传输层将此协议端口收到的数据传送给Winsock。3.3.3 使用Socket配置好一个Socket后,程序就能够使用Winsock在网络上传送和接收数据了。Winsock有四个函数:两个用于数据传送(send、sendto),两个用于数据接收(recv、recvfrom)。由于send和recv函数不能指定目的地址,只能用于面向连接的Socket,其典型调用过程为:result=send(“Socket句柄”,“报文缓冲区”,“缓冲区长度”,“特殊标志”);Winsock将从Socket句柄确定的内部Socket数据结构中获取目的地址信息,接着send函数将传送报文缓冲区中的数据,这些数据将被传送到Winsock内部Socket数据结构中指明的网络地址中去。recv函数与之相对应,其调用过程为:result=recv(“Socket句柄”,“报文缓冲区”,“缓冲区长度”,“特殊标志”);程序在无连接的Socket上使用sendto和recvfrom函数,其使用如下:result=sendto(“Socket句柄”,“报文缓冲区”,“缓冲区长度”,“特殊标志”,“Socket地址结构”,“地址结构长度”);result=recvfrom(“Socket句柄”,“报文缓冲区”,“缓冲区长度”,“特殊标志”,“Socket地址结构”,“地址结构长度”);sendto函数在Winsock的内部数据结构中保存远地服务器信息,在程序调用sendto函数之前,必须在一个Socket数据结构中保存远地服务器信息,程序将此地址结构的指针传递给sendto函数。当Winsock需要传输层传送sendto报文缓冲区中的数据时,Winsock将其内部数据结构保存的信息传送给传输层,传输层使用此数据结构中的信息格式化UDP数据报头,并将此数据通过网络传送。使用recvfrom函数的服务器需要分离出发送者的地址,客户程序使用recvfrom函数时,如果客户想继续进行网络对话,就需要分离出发送者的地址。“特殊标志”参数使用符号常数MSGOOB作为标志值,表示可以从协议端口请求带外数据。带外数据是程序必须立即处理的紧急数据,如存在带外数据,函数立即将紧急数据返回给程序,如果没有带外数据,函数返回常数错误值EINVAL。若“特殊标志”参数使用符号常数MSGPEEK作为标志值,表示可以对传输层输入队列中的数据进行分析。如果不需使用这两个标志,可将“特殊标志”参数指定为0。第四章 系统方案设计本章对系统的总体方案进行了设计,比较了C/S模式和B/S模式的不同并采用了C/S模式作为系统的整体结构模型,对多个文件传输协议进行了比较与分析,最后确立采用基于Socket的新的专用文件传输协议来实现系统的具体要求,具有较高的灵活性,软件开发方法采用面向对象软件开发方式,最后介绍了系统的总体的设计流程。4.1B/S 结构与C/S结构的选择4.1.1 B/S结构与C/S结构B/S模式是一种以Web技术为基础的新型的系统平台模式18,它把传统C/S模式中的服务器部分分解为一个数据服务器与一个或多个应用服务器(Web服务器),从而构成一个三层结构的客户服务器体系,它简化了客户端。其次,它简化了系统的开发和维护。各个用户通过HTTP请求在权限范围内调用Wbe服务器上不同处理程序,从而完成对数据的查询或修改。相对于C/S,B/S的维护具有更大的灵活性。另外,它使用户的操作变得更简单。C/S模式的客户应用程序有自己特定的规格,使用者需要接受专门培训。而采用B/S模式时,客户端只是一个简单易用的浏览器软件,无论是决策层还是操作层的人员都无需培训,就可以直接使用。Internet/Intranet采用的B/S计算模型实质上是一种扩展了的C/S模型。其一端是Web客户,一端是Web服务器,二者通过HTTP协议通信。客户向服务器发出服务请求,包括对数据库的数据请求,服务器响应客户请求并把响应结果送给客户浏览器。使用浏览器(如IE)与某一台主机或系统进行连接,并不需要更换软件或再启动其它软件,所以用户的界面具有一致性,易于操作。C/S模式主要由客户应用程序、服务器管理程序和中间件三个部分组成。首先,交互性强是C/S固有的一个优点。在C/S中,客户端有一套完整应用程序,在出错提示、在线帮助等方面都有强大的功能,并且可以在子程序间自由切换。其次,C/S模式提供了更安全的存取模式。由于C/S在逻辑结构上比B/S少一层,对于相同的任务,C/S完成的速度总比B/S处理速度快,使得C/S更利于处理大量数据。在系统平台模式时,要考虑到B/S模式的先进性,也要考虑到C/S模式的成熟性,还可以根据系统自身的业务特点,采取C/S与B/S交叉并用的体系结构。4.1.2 C/S模式的采用网络应用的最主要的模型是Client/Server模型,其实质是“请求驱动”。Client/Server模型最终可归结为一种“请求/应答”关系19。一个请求总是首先被客户发出,然后服务器总是被动地接收请求,返回客户需要的结果。在客户发出一个请求之前,服务进程一直处于休眠状态。一个客户提出请求后,服务进程被“唤醒”并且为客户提供服务,对客户的请求作出所需要的应答。这一请求/应答相应的过程可以用图4-1来表示。由于本系统需要支持分组文件的断点续传,需要向客户端提供比较完善的功能,支持子程序的方便切换、支持新的应用层通信协议等等,而B/S模式与C/S相比不能在这些方面提供很好的支持,所以本系统采用了Client/Server模式,同时也利用了Client/Server模型五个方面的特点:(1)是Client/Server模型最重要的特点是非对等相互作用,即客户与服务器处于不平等的地位,服务器拥有客户所不具备的硬软件资源,客户和服务器分别是服务的请求者和提供者。实际上,网络中各个机器的资源是不平等的,网络的真正目的就是共享这些不均等的资源,Client/Server模型的非对等相互作用特点也正好体现和适应了客观现实中资源的不均等现象。(2)关于技术性的,网络上不同主机进程间通信完全是异步的,通信时机具有随机性,所以必须有一种为通信双方的数据交换提供同步的机制,而Client/Serverr模型对此机制提供了极好的支持。由于上述原因,Client/Server模型由Sybase公司首先提出并在实际中应用后,迅速获得了广泛的支持,事实上己成为网络应用的标准模式。(3)可以更方便、更清晰地分工应用软件的设计任务。(4)可以降低对客户机的要求,使客户机只需处理人机界面为主的工作,适应日益扩展的应用需求。(5)防止客户机上有权连接数据库的用户绕过系统中的客户端应用系统,利用自行安装在客户机上的数据库访问工具非法访问某些未授权的数据,从而保证了安全性(由功能服务器负责)。4.2 文件传输协议的比较本系统能够支持文件分组上传并且同时能够处理文件在分组传输时网络发生断线后的续传问题,而且很重要的一点是客户可以在客户端程序的界面上对文件进行分组,这样一是可以方便用户的操作,二是可以更少的暴露服务器端的内容从而保证服务器的安全。三是操作简单,容易实现。4.2.1 早期文件传输协议的研究比较在上第一章里,我们曾经简单的列举了几种用于文件传输的协议,包括XODME等一些早一些开发的文件传输协议,其中虽然YMODEM传输协议支持分组文件传输,从表面上看应该采用这种协议,但是由于以下两个原因而没有采用,一是因为这个协议要指定一个目录,然后协议才能把目录下的所有文件传送到服务器端,这样,如果用户要传输10组图片附带声音档的组文件,那么就需要用户亲自建立10个文件夹,分10次传送出去,这样非常影响用户的工作效率;假设文件被分组传输到了服务器端,由于协议中没有对分组文件的管理支持,更谈不上发生断点时保证组文件关联上的完整性了,二是因为这个协议诞生在DOS系统很流行的时候,所以这个协议对DOS软件比较合适,对于现在运行在图形界面下的程序来说,如果采用这种协议来进行文件的分组传输,则不能很好的发挥图形界面友好的特性,从而会使用户感觉很不方便。对于文件传输协议XMODEM CRC协议,XMODEM 1K协议,YMODEM G协议,ZMODEM协议,Kermit协议,也存在相似的问题,所以本系统并没有采用它们来作为文件传输所采用的通信协议。4.2.2 HTTP协议传输文件的方式HTTP协议建立在请求/应答模型上,一个请求的程序(叫作客户)与一个接收程序(叫作服务器)建立连接16。HTTP协议中传输的数据称为实体(Entity),它可能包含请求和响应资源的特定表示或解释。一个实体由实体首部(Entity-HEAD)和实体主体(Entity-BODY)构成。在请求/响应模型中,客户请求的形式是请求方法、统一资源标示符(URI)和协议版本号,后面紧跟包含请求参数、客户信息,可能还有信息自身的内容等,服务器用一个状态响应(包括它的协议版本号、成功或失败代码),后面紧跟包含服务器信息、实体信息,可能还有信息的内容等。HTTP/1.1以及以后的版本的请求型消息(Reuqest Mesasge)中定义了多种请求方法,其中GTE、HEAD、PUT方法可以用于文件传输。由于HTTP协议支持下的文件传输只涉及到客户端程序设计,因而软件实现不依赖于其它应用程序,只与具体的WEB服务器有关(如果WEB服务器遵循国际标准的话,HTTP协议进行文件传输的客户程序将是完全独立的)。以下是向服务器上载文件为例说明其设计与实现。图4-2是服务器/客户机发送和接收信息的过程。由于在本章第一节中已经采用C/S作为系统基本开发平台模式,而利用HTTP协议进行文件上传属于B/S范畴,况且在网站中已经实现了这种文件传输方式,从而能够满足单个文件传输的需求,但是不能满足分组文件传输的需求。4.2.3 FTP文件传输协议的研究在Interent上,FTP是文件传输事实上的标准,它用来在不同主机之间传送二进制、图形、ASCII文本等各种类型的文件。FTP有两种访问方式:用户FTP和匿名FTP。前者指用户在FTP服务器上拥有帐号并允许用户访问允许访问的文件;后者允许用户以“匿名”方式进入系统,即用户不需要在服务器上拥有帐号就可以存取或传送文件。相对而言,后者因为给用户的自由度较大而使用得较多。FTP的目标是提高文件的共享性,提供非直接使用远程计算机,使存储介质对用户透明和可靠高效地传送数据。虽然我们也可以手工使用它,但是它的主要作用是供程序使用的。FTP支持用户登录,提供用户名和可选的口令,可以列出目录,并发送和接收文件。FTP不仅支持用户交互式地传输文件,同时也支持程序到程序的数据传输。数据可以是文本文件、编码后的数据,也可以是应用程序。用户进程可以请求将一个文件从主机传输到用户的计算机上,也可以在两台远程主机之间启动一个第三方传输。为了完成传输,FTP使用两个TCP连接:控制命令和数据传输13。FTP使用Telnet协议作为其命令通道,利用Telnet的访问控制过程来进行用户的身份认证。4.3 建立新的利用套接字方式的通信协议前面已经讨论过了XMODEM系列协议15,RCP协议,Kermit协议,以及HTTP协议没有被选定为本系统文件传输协议的原因。对于本系统没有选择FTP作为文件传输的协议,主要考虑到在FTP的服务命令中,包含有如删除文件(DELE)命令,删除目录(RMD)命令,建立目录(MKD)命令等等,用户可以使用这些命令来对服务器上特定的文件夹以及文件进行操作,这样的危险性也是很大的,对服务器就存在一定威胁,另外本系统包括服务器端用户文件夹的创建、管理、以及尺寸规整等,还要对数据库进行数据的读取、更新、添加、删除等操作,这些就使得FTP协议在处理这些特殊要求时显得非常不合适,也显得很不灵活,这样就确定建立新的文件通信协议,而协议的实现是基于Socket套接字的,所以实现起来非常灵活,同时将必要的安全措施加入到协议实现中,就会使文件传输过程更加可靠。最重要的是Socket 是面向客户/服务器模型而设计的,针对客户和服务器程序提供不同的Socket 系统调用。客户随机申请一个Socket (相当于一个想打电话的人可以在任何一台入网电话上拨号呼叫),系统为之分配一个Socket号;服务器拥有全局公认的 Socket ,任何客户都可以向它发出连接请求和信息请求(相当于一个被呼叫的电话拥有一个呼叫方知道的电话号码)。从而很方便的实现了两台主机的连接和通信。因此最后选定基于Socket套接字方式来实现本设计。第五章 系统详细设计5.1 系统总体设计点对点文件传输系统的实现应包含服务器模块、客户端模块、界面显示模块等几个部分,整个程序采用VC+6.0完成,通信部分采用WINSOCK,主要要能够实现文件的上传和下载,同时可以对已经上传的文件进行删除等操作。图5-1是一个成功的文件传输过程的流程,但有可能出现接收方拒绝接收,或者在传输过程中,发送方取消发送或接收方取消接收的情况,在编程实现上必须考虑这些问题。本软件采用面向连接的流式套接字,基于客户/服务器模型。为了使用方便,将客户和服务器设计在同一个用户界面中,根据用户需要将程序设置成客户端或者服务器端。程序工作时,首先由程序建立套接字连接,在连接的基础上,由重载的Socket事件通知函数启动相应的任务。为了提高程序的反应速度,程序的文件上传和文件下载任务由辅助线程启动。程序的调用时序图如下(图5-2所示):5.2系统功能模块设计 5.2.1 服务器模块(1)在初始化阶段调用WSAStartup()此函数在应用程序中初始化Windows Sockets DLL ,只有此函数调用成功后,应用程序才可以再调用其他Windows Sockets DLL中的API函数。在程序中调用该函数的形式如下: WSAStartup(WORD)(18|1),(LPWSADATA)&WSAData),其中(18|1)表示我们用的是WinSocket1.1版本,WSAData用来存储系统传回的关于WinSocket的资料。(2)建立Socket 初始化WinSock的动态连接库后,需要在服务器端建立一个监听的Socket,为此可以调用Socket()函数来建立这个监听的Socket,并定义此Socket所使用的通信协议。此函数调用成功返回Socket对象。失败则返回INVALID_SOCKET(调用WSAGetLastError()可得知原因,所有WinSocket 的函数都可以使用这个函数来获取失败的原因)。SOCKET PASCAL FAR Socket( int af, int type, int protocol );参数::af:目前只提供 PF_INET(AF_INET);type:Socket 的类型 (SOCK_STREAM、SOCK_DGRAM);protocol:通讯协定(如果使用者不指定则设为0);如果要建立的是遵从TCP/IP协议的Socket,第二个参数type应为SOCK_STREAM,如为UDP(数据报)的Socket,应为SOCK_DGRAM。因此本设计中type应为SOCK_STREAM。(3)绑定端口 接下来要为服务器端定义的这个监听的Socket指定一个地址及端口(Port),这样客户端才知道待会要连接哪一个地址的哪个端口,为此我们要调用bind()函数,该函数调用成功返回0,否则返回SOCKET_ERROR。int PASCAL FAR bind( SOCKET s, const struct sockaddr FAR *name,int namelen );参 数: s:Socket对象名;name:Socket的地址值,这个地址必须是执行这个程式所在机器的IP地址; namelen:name的长度;如果使用者不在意地址或端口的值,那么可以设定地址为INADDR_ANY,及Port为0,Windows Sockets 会自动将其设定适当之地址及Port (1024 到 5000之间的值)。此后可以调用getsockname()函数来获知其被设定的值。 (4)监听当服务器端的Socket对象绑定完成之后,服务器端必须建立一个监听的队列来接收客户端的连接请求。listen()函数使服务器端的Socket 进入监听状态,并设定可以建立的最大连接数(目前最大值限制为 5,最小值为1)。该函数调用成功返回0,否则返回SOCKET_ERROR。int PASCAL FAR listen( SOCKET s, int backlog );参 数: s:需要建立监听的Socket;backlog:最大连接个数;服务器端的Socket调用完listen()后,如果此时客户端调用connect()函数提出连接申请的话,Server 端必须再调用accept() 函数,这样服务器端和客户端才算正式完成通信程序的连接动作。为了知道什么时候客户端提出连接要求,从而服务器端的Socket在恰当的时候调用accept()函数完成连接的建立,我们就要使用WSAAsyn
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年庆阳市事业单位招聘真题
- 2025年福建省罗源县城市管理和综合执法局内勤人员招聘考前自测高频考点模拟试题及完整答案详解
- 2025内蒙古选聘自治区特邀行政执法社会监督员模拟试卷及答案详解1套
- 2025内蒙古自治区阿尔山市属国有企业外部董事拟进入人员模拟试卷及答案详解(有一套)
- 2025福建省华兴集团有限责任公司招聘考前自测高频考点模拟试题及答案详解(考点梳理)
- 2025年福建省厦门实验中学招聘1人考前自测高频考点模拟试题及答案详解(全优)
- 2025霍州煤电井下岗位高校毕业生招聘290人(山西)考前自测高频考点模拟试题附答案详解(考试直接用)
- 2025江西都市城际公交有限公司招聘2名劳务派遣人员模拟试卷含答案详解
- 2025内蒙古通辽经济技术开发区事业单位急需紧缺人才引进26人考前自测高频考点模拟试题及答案详解(各地真题)
- 2025贵州省临床检验中心第十三届贵州人才博览会引才2人考前自测高频考点模拟试题及答案详解(网校专用)
- 矿山安全培训课件-地下矿山开采安全技术
- 汪小兰版有机化学答案全
- DB32∕T 3751-2020 公共建筑能源审计标准
- DB51T 2975-2022气凝胶复合保温隔热材料及系统通用技术条件
- 高中音乐《学会聆听音乐》第三课时《联想与想象》 课件
- 实验,双子叶植物根类药材的鉴定课件
- 高中音乐鉴赏 第一单元 学会聆听 第一节《音乐要素及音乐语言》
- GB/T 40302-2021塑料立式软薄试样与小火焰源接触的燃烧性能测定
- 20以内加减法口算题3500道直接打印
- 北斗卫星导航系统(全套课件208P)
- 急诊科岗位职责
评论
0/150
提交评论