完整word版基于TCP的文件传输实验报告docxWord格式.docx
《完整word版基于TCP的文件传输实验报告docxWord格式.docx》由会员分享,可在线阅读,更多相关《完整word版基于TCP的文件传输实验报告docxWord格式.docx(23页珍藏版)》请在冰豆网上搜索。
3.1.1、体8
3.1.2、模9
3.2、程序10
3.2.1、工作原理10
3.2.2、服器端主程序11
3.2.3、客端主程序14
4、17
参考文献17.
成定18
1
基于TCP协议的文件传输系统
摘要
随着网络的普及,网络编程显得尤其重要。
本实验使用Winsock控件实现两台计算机间的文
件传输,描述了Winsock控件的使用方法及有关文件传输的算法。
随着计算机网络的迅速发展,人们的生活越来越离不开网络,如今网络编程已成为计算
机发展的热点,而在众多的网络通信中,又以TCP/IP协议最为流行。
本文讨论的Winsock控件,
提供了访问TCP/IP网络的捷径,使用它可以不必了解TCP/IP的细节和调用WinsockAPI,只要
设置好相应的属性和触发事件后的处理,就可以实现计算机之间的数据通信,进行文件传输了。
同时为了便于传输文件过程中的中断现象,在实验时应该充分考虑断点续传问题,即中断文件传
输后已经传输的文件不丢失,等到再传时,能继续接着传送。
关键词:
TCP/IP协议,Winsock控件,网络编程,文件传输,断点续传。
2
1、实验的相关知识
1.1通信的模式
由于是实现点对点的文件传输,因此在程序中我们使用的是C/S的模式来实现通信。
对于C/S
的模式,即分为客户端和服务端。
服务端用来接收客户端的连接,实现两端之间互相传输文件。
采用C/S的模式可以更好的体现程序的功能设计思想,充分调用在LAN中的server和client两
方面的处理能力,极大的减少网络上的信息流通量。
C/S体系结构有可能提供一种开放式的、易
伸缩扩展的分布式计算机环境,并保护硬件等投资。
1.1.1传输的可靠性
要想实现文件的可靠性传输,可以使用流式套接字。
因为流式套接字提供面向连接的、无差
错的、发送顺序一致的、包长度不限和非重复的网络信息的传输,能提供更好的可靠性。
而对于
数据报套接字提供的是无连接的服务,以独立的数据报进行传输,不保证顺序性、可靠性和无重
复性,相比之下用流式套接字能提供更好的的可靠性传输。
1、2、1TCP/IP的网络体系结构
TCP/IP协议采用层次体系结构,如图1所示,从图中可以看出,每一层在逻辑上都与通信
端的对应层相连接。
图中所示的服务器程序持续监听通信客户端;
客户端仅周期性地与服务器相
连接以交换数据,其中TCP协议层提供相当于OSI参考模型中传输层的服务,为收、发端应用程
序提供通信;
IP协议层负责提供统一的数据报;
链路层主要功能是收、发IP层的IP数据报;
TCP/IP
之上是该协议提供的各种服务,而底层网络可以是不同的物理网络,如Ethernet、TokenRing、
X.25公共分组交换网等。
3
图1TCP/IP协议层模型(LAN)
1、2、2TCP/IP网络协议
协议是对等的网络实体之间通信的规则,可以简单地理解为网络上各计算机彼此交流的一种
“语言”。
网络通信协议设计的基本原则是层次化,层和协议的集合被称为网络体系结构。
相邻
层之间的接口定义了下层向上层提供的基本操作和服务,下层向上层提供的服务分两种形式:
面
向连接的服务和无连接的服务。
计算机网络中已经形成的网络体系结构主要有两个:
OSI参考模型和TCP/IP参考模型。
参考模型是因特网(Internet)的基础。
和OSI的7层协议相比,TCP/IP协议只有4个层次。
通
常说的TCP/IP是一组协议的总称,TCP/IP实际上是一个协议族,包括100多个相互关联的协议,
其中IP(InternetProtocol,网际协议)是网络层最主要的协议;
TCP(TransmissionControl
Protocol,传输控制协议)和UDP(UserDatagramProtocol,用户数据报协议是传输层中最主要的
协议),一般认为IP、TCP、UDP是最根本的三种协议,是其他协议的基础。
1.2.3TCP——传输控制协议
面向连接的通信可以使用可靠通信,在这时候,第四层协议发送数据接收方的确认,如果未收
到数据或者数据被损坏,则请求重新传输。
TCP协议就使用这种可靠通信。
使用TCP协议的应用
层协议包括HTTP、FTP、SMTP和Telnet等。
TCP要求在发送数据之前必须打开连接。
服务器应用程序必须执行一个称作被动打开
4
(passiveopen)的操作,以利用一个已知的端口号创建一个链接,这是,服务器并不是对网络
进行呼叫,而是侦听并等待引入的请求。
客户应用程序必须执行一个主动打开(activeopen),
为此,它向服务器应用程序发送一个同步序列号(SYN)以标识连接。
客户应用程序可以将动态端
口号作为本地端口使用。
服务器必须向客户发送一个确认(ACK)以及服务器的序列号(SYN)。
随后,客户回复一个ACK,这样就建立了链接。
现在可以发送和接收消息了。
接收消息后,总是返回ACK消息。
如果在收到ACK之前发送方
已经超时,则消息将被放到重发队列中以再次发送。
由于它的握手机制,所以TCP协议比较复杂并且费时,但此协议在处理数据时对数据包的传
送有保障,从而使得在应用程序协议中不需要再包括该功能。
2.Winsock控件
Winsock即WindowsSockets规范的简称,是目前最流行的网络通信应用程序接口之一。
所谓
Socket,通常也称作"
套接字"
,用于描述IP地址和端口,是一个通信链的句柄。
应用程序通常通
过“套接字”向网络发出请求或者应答网络请求。
Socket是网络上运行的两个程序间双向通讯的
一端,它既可以接受请求,也可以发送请求,利用它可以较为方便的编写网络上数据的传递。
Winsock控件工作在传输层上,在这一层上,目前主要流行的协议包括TCP和UDP两种:
TCP协议
适用于那些对于数据的可靠性要求比较高的情况,目前大多数的网络应用层协议都是基于TCP协
议的(例如常用的HTTP、FTP、SMTP、POP3等协议);
UDP协议适用于对数据可靠性要求不高而
对速度要求较高的情况,这里主要包括一些需要大流量的(例如Real公司的RTSP协议,腾讯公
司的QQ协议等)。
2.1.1Winsock控件重要属性、方法和事件
(1)属性
Protocol:
通过Protocol属性可以设置WinSock控件连接远程计算机使用的协议。
可选的协议是TCP
和UDP,对应的VB中常量分别是sckTCPProtocol和sckUDPProtocol,Winsock控件默认协议是
TCP。
注意:
虽然可以在运行时设置协议,但必须在连接未建立或断开连接后。
SocketHandle:
SocketHandle返回当前socket连接的句柄,这是只读属性。
RemoteHostIP:
5
返回远程计算机的IP地址。
在客户端,当使用了控件的Connect方法后,远程计算机的IP
地址就赋给了RemoteHostIP属性,而在服务器端,当ConnectRequest事件后,远程计算机(客
户端)的IP地址就赋给了这个属性。
如果使用的是UDP协议那么当DataArrival事件后,发送
UDP报文的计算机的IP才赋给了这个属性。
ByteReceived:
返回当前接收缓冲区中的字节数。
State:
用于返回当前WinSock控件的状态。
如表2-1所示。
表1-1返回WinSock控件当前的状态
常数
值
描述
sckClosed
缺省值,关闭
SckOpen
打开
SckListening
侦听
sckConnectionPen
连接挂起
ding
sckResolvingHost
识别主机
sckHostResolved
已识别主机
sckConnecting
6
正在连接
sckConnected
7
已连接
sckClosing
8
同级人员正在关闭
连接
sckError
9
错误
(2)方法
Bind:
用Bind方法可以把一个端口号固定为本控件使用,使得别的应用程序能再使用这个端口。
Listen:
只在使用TCP协议时有用。
它将应用程序置于监听检测状态。
Connect:
当本地计算机希望和远程计算机建立连接时,就可以调用Connect方法。
Accept:
当服务器接收到客户端的连接请求后,服务器有权决定是否接受客户端的
请求。
SendData:
当连接建立后,要发送数据就可以调用SendData方法,该方法只有一个参
数,就是要发送的数据。
GetData:
当本地计算机接收到远程计算机的数据时,数据存放在缓冲区中,要从缓
冲区中取出数据,可以使用GetData方法。
PeekData:
和GetData方法类似,但PeekData在取得数据后并不把缓冲区清空。
(3)事件
ConnectRequest:
当本地计算机接收到远程计算机发送的连接请求时,控件的ConnectRequest事件将会被触
发。
SendProgress:
当一端的计算机正在向另一端的计算机发送数据时,SendProgress事件将
被触发。
SendProgress事件记录了当前状态下已发送的字节数和剩余字节数。
SendComplete:
当所有数据发送完成时,被触发。
DataArrival:
当建立连接后,接受到了新数据就会触发这个事件。
如果在接受到
新数据前,缓冲区中非空,就不会触发这个事件。
Error:
当在工作中发生任何错误都会触发这个事件。
2.1.2Winsock控件通信的工作原理
Winsock控件是基于Socket规范创建的,所以其通信的实质是对Socket接口进行数据的
读写操