《基于TCP的文件传输实验报告.docx》由会员分享,可在线阅读,更多相关《基于TCP的文件传输实验报告.docx(13页珍藏版)》请在第一文库网上搜索。
1、综合课程设计报告基于TCP协议的文件传输系统学生姓名:指导教师:所在系:所学专业:年级:2011年6月目录摘要21、实验的相关知识31.1、通信的模式31.1.K传输的可靠性31. 2.1、TCP/IP的网络体系结构3、TCP/IP网络协议41.2.3、TCP传输控制协议42、WinSoCk控件52. 1.1winsock的重要属性、方法和事件53. 1.2、winsock控件通信的工作原理73、程序设计与实现83.1、 程序设计8、总体设计8、模块设计93.2、 程序实现10、工作原理10、效劳器端主程序11、客户端主程序144、实验总结17参考文献17.成绩评定18基于TCP协议的文件传输
2、系统摘要随着网络的普及,网络编程显得尤其重要。本实验使用Winsock控件实现两台计算机间的文件传输,描述了Winsock控件的使用方法及有关文件传输的算法。随着计算机网络的迅速开展,人们的生活越来越离不开网络,如今网络编程已成为计算机开展的热点,而在众多的网络通信中,又以TCP/IP协议最为流行。本文讨论的WinSOCk控件,提供了访问TCP/IP网络的捷径,使用它可以不必了解TCP/IP的细节和调用WinSoCkAPI,只要设置好相应的属性和触发事件后的处理,就可以实现计算机之间的数据通信,进行文件传输了。同时为了便于传输文件过程中的中断现象,在实验时应该充分考虑断点续传问题,即中断文件传
3、输后已经传输的文件不丧失,等到再传时,能继续接着传送。关键词:TCP/IP协议,WinSoCk控件,网络编程,文件传输,断点续传。1、实验的相关知识11通信的模式由于是实现点对点的文件传输,因此在程序中我们使用的是C/S的模式来实现通信。对于C/S的模式,即分为客户端和效劳端。效劳端用来接收客户端的连接,实现两端之间互相传输文件。采用C/S的模式可以更好的表达程序的功能设计思想,充分调用在1AN中的server和C1ient两方面的处理能力,极大的减少网络上的信息流通量。C/S体系结构有可能提供一种开放式的、易伸缩扩展的分布式计算机环境,并保护硬件等投资。1.1.1传输的可靠性要想实现文件的可
4、靠性传输,可以使用流式套接字。因为流式套接字提供面向连接的、无过失的、发送顺序一致的、包长度不限和非重复的网络信息的传输,能提供更好的可靠性。而对于数据报套接字提供的是无连接的效劳,以独立的数据报进行传输,不保证顺序性、可靠性和无重复性,相比之下用流式套接字能提供更好的的可靠性传输。1、2、ITCP/IP的网络体系结构TCP/IP协议采用层次体系结构,如图1所示,从图中可以看出,每一层在逻辑上都与通信端的对应层相连接。图中所示的效劳器程序持续监听通信客户端;客户端仅周期性地与效劳器相连接以交换数据,其中TCP协议层提供相当于OS1参考模型中传输层的效劳,为收、发端应用程序提供通信;IP协议层负
5、责提供统一的数据报;链路层主要功能是收、发IP层的IP数据报;TCP/IP之上是该协议提供的各种效劳,而底层网络可以是不同的物理网络,如Ethernet、TokenRing、X.25公共分组交换网等。图1TCP/IP协议层模型1AN1、2、2TCP/IP网络协议协议是对等的网络实体之间通信的规那么,可以简单地理解为网络上各计算机彼此交流的一种“语言。网络通信协议设计的根本原那么是层次化,层和协议的集合被称为网络体系结构。相邻层之间的接口定义了下层向上层提供的根本操作和效劳,下层向上层提供的效劳分两种形式:面向连接的效劳和无连接的效劳。计算机网络中已经形成的网络体系结构主要有两个:OS1参考模型
6、和TCP/IP参考模型。TCP/IP参考模型是因特网Internet的根底。和OS1的7层协议相比,TCP/IP协议只有4个层次。通常说的TCP/IP是一组协议的总称,TCP/IP实际上是一个协议族,包括100多个相互关联的协议,其中IP(InternetProtoco1,网际协议)是网络层最主要的协议;TCP(TransmissionContro1PrOtOCOI,传输控制协议)和UDP(UserDatagramProtoco1,用户数据报协议是传输层中最主要的协议),一般认为IPTCP、UDP是最根本的三种协议,是其他协议的根底。TCP传输控制协议面向连接的通信可以使用可靠通信,在这时候,
7、第四层协议发送数据接收方确实认,如果未收到数据或者数据被损坏,那么请求重新传输。TCP协议就使用这种可靠通信。使用TCP协议的应用层协议包括、FTP、SMTP和Te1net等。TCP要求在发送数据之前必须翻开连接。效劳器应用程序必须执行一个称作被动翻开(passiveOPen)的操作,以利用一个的端口号创立一个链接,这是,效劳器并不是对网络进行呼叫,而是侦听并等待引入的请求。客户应用程序必须执行一个主动翻开(activeopen,为此,它向效劳器应用程序发送一个同步序列号SYN以标识连接。客户应用程序可以将动态端口号作为本地端口使用。效劳器必须向客户发送一个确认ACK以及效劳器的序列号SYN。
8、随后,客户回复一个ACK,这样就建立了链接。现在可以发送和接收消息了。接收消息后,总是返回ACK消息。如果在收到ACK之前发送方已经超时,那么消息将被放到重发队列中以再次发送。由于它的握制,所以TCP协议比拟复杂并且费时,但此协议在处理数据时对数据包的传送有保障,从而使得在应用程序协议中不需要再包括该功能。2.Winsock控件Winsock即WindowsSockets标准的简称,是目前最流行的网络通信应用程序接口之一。所谓Socket,通常也称作套接字,用于描述IP地址和端口,是一个通信链的句柄。应用程序通常通过“套接字向网络发出请求或者应答网络请求。SOCket是网络上运行的两个程序间双
9、向通讯的一端,它既可以接受请求,也可以发送请求,利用它可以较为方便的编写网络上数据的传递。WinSoCk控件工作在传输层上,在这一层上,目前主要流行的协议包括TCP和UDP两种:TCP协议适用于那些对于数据的可靠性要求比拟高的情况,目前大多数的网络应用层协议都是基于TCP协议的例如常用的、FTP、SMTP.POP3等协议);UDP协议适用于对数据可靠性要求不高而对速度要求较高的情况,这里主要包括一些需要大流量的例如Rea1公司的RTSP协议,腾讯公司的QQ协议等)。2. 1.1WinSOCk控件重要属性、方法和事件(1)属性Protoco1:通过PrOtOCOI属性可以设置WinSOCk控件连
10、接远程计算机使用的协议。可选的协议是TCP和UDP,对应的VB中常量分别是sckTCPProtoco1和SCkUDPPrOtoCo1,Winsock控件默认协议是TCP0注意:虽然可以在运行时设置协议,但必须在连接未建立或断开连接后。SocketHand1e:SocketHand1e返回当前socket连接的句柄,这是只读属性。RemoteHostIP:返回远程计算机的IP地址。在客户端,当使用了控件的COnneCt方法后,远程计算机的IP地址就赋给了RemoteHostIP属性,而在效劳器端,当ConnectRequest事件后,远程计算机客户端的IP地址就赋给了这个属性。如果使用的是UDP
11、协议那么当DataArTiVa1事件后,发送UDP报文的计算机的IP才赋给了这个属性。ByteReceived:返回当前接收缓冲区中的字节数。State:用于返回当前WinSOCk控件的状态。如表2-1所示。表1-1返回WinSock控件当前的状态常数值描述SckC1osed0缺省值,关闭SckOpen1翻开Sck1istening2侦听SckConnectionPending3连接挂起SckReso1vingHost4识别主机SckHostReso1ved5已识别主机SckConnecting6正在连接SckConnected7已连接SckC1osing8同级人员正在关闭连接SckError
12、9错误(2)方法Bind:用Bind方法可以把一个端口号固定为本控件使用,使得别的应用程序能再使用这个端口。1isten:只在使用TCP协议时有用。它将应用程序置于监听检测状态。Connect:当本地计算机希望和远程计算机建立连接时,就可以调用Connect方法。Accept:当效劳器接收到客户端的连接请求后,效劳器有权决定是否接受客户端的请求。SendData:当连接建立后,要发送数据就可以调用SendData方法,该方法只有一个参数,就是要发送的数据。GetData:当本地计算机接收到远程计算机的数据时,数据存放在缓冲区中,要从缓冲区中取出数据,可以使用GetData方法。PeekData
13、:和GetData方法类似,但PeekData在取得数据后并不把缓冲区清空。(3)事件ConnectRequest:当本地计算机接收到远程计算机发送的连接请求时,控件的ConnectRequest事件将会被触发。SendProgress:当一端的计算机正在向另一端的计算机发送数据时,SendProgress事件将被触发。SendProgress事件记录了当前状态下已发送的字节数和剩余字节数。SendComp1ete:当所有数据发送完成时,被触发。DataArriva1:当建立连接后,接受到了新数据就会触发这个事件。注意:如果在接受到新数据前,缓冲区中非空,就不会触发这个事件。Error:当在工
14、作中发生任何错误都会触发这个事件。2. 1.2Winsock控件通信的工作原理WinSOCk控件是基于SOCket标准创立的,所以其通信的实质是对SOCket接口进行数据的读写操作。如果两个应用程序需要通信,它们可以通过使用Socket类来建立套接字连接,可以将这个过程想象为一次呼叫过程:呼叫者通过拨号与被呼叫者连接,当接通时,双方都可以自由通话了,只不过这里的呼叫者被称为“客户,被呼叫者那么称为“效劳器,而号码那么为“IP地址+端口,但在建立连接之前,必须由“客户发出呼叫,且此时的“效劳器正在监听。因此,基于TCP/IP协议的通信,需要分别建立客户端应用程序和效劳器端应用程序。其大致流程如图
15、1所示:图1Winsock工作原理端口号被规定在65535范围内的某一个整数,其中1023被预先定义的效劳器通信所占用如te1net占用23,占用端口80,所以最好使用102465535这些端口中的某一个,以免发生端口冲突。3程序设计与实现3.1程序设计3. 1.1总体设计本程序的文件传输系统的实现应包含效劳端模块、客户端模块等几个局部,整个程序采用VB完成。程序使用流式套接字,基于C/S模型。在设计时设计客户端和效劳端两个界面中,效劳器用于发送文件,客户端用于接收文件。效劳器和客户机的根本流程如图2所示。在通信的时候主要可以分为两个局部,一个局部是控制信息的传输局部,而另一个局部就是文件的传输局部。传送的控制信息可以包含发送文件的请求,文件的名称、大小等,由于这方面的数据量比拟小,因此采用了VB所提供的WINSOCket类的串行化技术来实现。对于文件的传输,由于数据量相对来说比拟大,所以用两个线程来实现文件的传输,一个线程用于发送,一个线程用于接收。效劳器客户机共发送数据。客户端要与效劳器端进行通信,首