您好,欢迎访问三七文档
Windows网络编程-FTP编程内容概要•FTP介绍•WindowsIIS下FTP服务器搭建•WindowsFTP编程1-WinInet•WindowsFTP编程2-WinSock•其他介绍•FTP协议•FTP工作原理•FTP文件数据结构•FTP数据传输模式•连接服务器•登录验证•关闭数据连接•FTP常用命令•FTP数据校验和数据重发机制FTP介绍FTP介绍1、FTP协议FTP是TCP/IP网络上两台计算机传送文件的协议,FTP是在TCP/IP网络和INTERNET上最早使用的协议之一。尽管WorldWideWeb()已经替代了FTP的大多数功能,FTP仍然是通过Internet把文件从客户机复制到服务器上的一种途径。FTP客户机可以给服务器发出命令来下载文件,上传文件,创建或改变服务器上的目录。由于FTP协议的传输速度比较快,我们在制作诸如“软件下载”这类网站时喜欢用FTP来实现,同时这种服务面向大众,不需要身份认证,即“匿名FTP服务器”(随着系统的不同有不同限制)。FTP是应用层的协议,它基于传输层,为用户服务,它们负责进行文件的传输。FTP是一个8位的客户端-服务器协FTP介绍议,能操作任何类型的文件而不需要进一步处理,就像MIME或Unicode一样。但是,FTP有着极高的延时,这意味着,从开始请求到第一次接收需求数据之间的时间会非常长,并且不时的必需执行一些冗长的登陆进程。FTP服务一般运行在20和21两个端口。端口20用于在客户端和服务器之间传输数据流,而端口21用于传输控制流,并且是命令通向ftp服务器的进口。当数据通过数据流传输时,控制流处于空闲状态。而当控制流空闲很长时间后,客户端的防火墙会将其会话置为超时,这样当大量数据通过防火墙时,会产生一些问题。此时,虽然文件可以成功的传输,但因为控制会话会被防火墙断开,传输会产生一些错误。(接上)FTP介绍2、FTP工作原理FTP的工作原理和TCP一样,FTP服务器和客户机之间的连接是可靠的、安全的,工作原理如下:FTP介绍3、FTP文件数据结构由于某些主机保存的文件是面向字节的,某些事面向记录的,所以在FTP中为了方便不同的文件之间的识别,做了如下规定:二进制结构:文件内部没有结构,一般被看做二进制流。文件格式结构:由许多的记录组成。页面结构:由不同的索引页组成文件。一般情况下,如果不适用FTP命令去设置文件的结构,则默认的是文件格式结构。附加:FTP支持的文件数据结构有如下几种结构文件结构。这是FTP默认的方式,文件被认为是一个连续的字节流,不存在内部的结构。记录结构。只适用于文本文件(ASCII或EBCDIC),是由连续的记录构成的。页结构。当文件是由非连续的多个部分组成时,使用页结构,这种文件称为随机访问文件。每页都带有页号发送,以便接收方能够随机地存储各页。FTP介绍4、FTP数据传输模式数据传输模式决定了文件数据以什么方式被发送出去。网络传输模式有3中:将数据格式化后传送、压缩后传送、不做任何处理进行传送。不论以什么方式进行传送,在数据结构中都以EOF结束,FTP文件传输模式有:二进制模式:就是将发送的数据转换为二进制在进行传送。这种模式下没有数据类型的限制。在二进制结构中,发送数据完数据后,会在关闭连接是标记EOF。如果是文件结构,EOF被表示为双字节。其中第一个字节为0,而控制信息包含在一个字节内。文件模式:文件模式就是以文件结构进行数据传输。文件结构是指用一些特别标记来描述文件的属性以及内容。一般情况下,文件结构都有自己的信息头,其中包含了计数信息和描述信息。信息头一般以结构体的形式出现。FTP介绍(接上)压缩模式:在该模式下,需要传送的信息包括数据、压缩数据和控制命令。一般数据:以字节的形式进行传送;压缩数据:包括数据副本和数据顾虑器;控制命令:用2个转义字符进行传送。在FTP数据传输时,发送方必须把数据转换为文件结构指定的形式在传送出去,而接收方则相反。因为进行转换很慢,所以一般在相同的系统中传送文本文件时都采用二进制流表示比较合适。5、与服务器进行连接(不是登录)连接成功后,才能进行文件数据的传输。当连接时,客户端需要指定端口、连接模式等操作。a.连接所使用的端口在连接端口的使用上,FTP与HTTP不同。因为FTP在与服务连接时需要用到两个端口:其中一个端口(FTP默认的端口是21)作为控制连接端口,它主要用于发送命令给服务器以及等待服务器的响应;另一个端口是数据传输端口,端口号为20或者任意有效端口号,用来建立数据传送通道。FTP介绍b.连接模式PORT模式:是主动模式。客户端选择这种模式连接服务器时,需要向服务器提供一个IP地址和端口号。PASV模式:被动模式。该模式服务器需要给客户端一个IP和端口号。用户平时从网上一个指定的FTP地址和端口下载文件就是该模式的一种应用,相反则为PORT模式。6、登录验证a.登录方式匿名登录、代理登录或者是通过用户名登录等。各种登录方式可以控制访问文件夹的权限。b.验证客户端将用户名和密码以命令的方式发送到服务器进行验证,例如用户名:zhangsan,密码为:123455,将其转换为命令流:“USER+zhangsan+123456”;这个命令将作为字符串发送给服务器,这个工作是通过CArchive等类中的各个函数实现的。服务器在验证之后将返(见下页)FTP介绍回一个结果给客户端。如果返回值的第一个数字是1、2或者是3,则表示返回值正确,否则发生错误。然后提取当前位置的下一条命令值,如果为EROR表示用户名或者密码错误;SUSS表示验证成功。7、关闭数据连接通常情况下,服务器只负责数据连接,并进行初始化和关闭。除非客户端在命令控制中主动要求关闭连接,服务器才会关闭连接。服务器也会在以下情况下关闭数据连接:当服务器发送数据结束时,会通过EOF终止传送;客户端发送ABORT命令;客户端改变了端口号;控制连接通道被关闭;传输过程中发生严重错误。8、FTP常用命令实际上,客户端只需要发送相关的命令到服务器端就行了,常用命令如下:LIST——发送当前工作目录下文件名到客户端;PWD——显示服务器当前工作目录名;RETR——从服务器下载一个文件;STOR——上传文件到服务器,如果文件存在会被覆盖;*STOU——上传文件到服务器,但不会覆盖原来的文件;STRU——设置文件的结构;MODE——指定数据的传输模式;ABORT——通知服务器关闭连接。FTP介绍9、数据校验与重发机制FTP属于TCP/IP簇中的一种具体应用,所以FTP也具有数据重发机制。但在FTP中,数据重发仅用于文件和压缩模式。一般情况下,重发机制都要求发送者在发送数据时加入特定标记来描述数据的重要信息。并且该标记只针对发送者有意义。其内容大多是用来校验数据完整性。特定标记可以表示任何可以标记的属性或其他信息。如果接收方也支持重发机制,那么接收方系统将保存这一标记。当系统重新启动或者其他原因造成系统重启,用户均可以根据原来的标记继续传输数据。用户经常用到的断点续传就是这样的。当接收方收到一段数据后,记下标记,如果传送过程中出现错误,那么发送方就会从这个标记点从新发送数据。•FTP介绍•WindowsIIS下FTP服务器搭建•WindowsFTP编程1-WinInet•WindowsFTP编程2-WinSock•其他介绍WindowsIIS组件下FTP服务器搭建①添加IIS应用程序(Windows7家庭普通版没有)②关闭防火墙③添加FTP站点演示步骤:•FTP介绍•WindowsIIS下FTP服务器搭建•WindowsFTP编程1-WinInet•WindowsFTP编程2-WinSock•其他介绍WindowsFTP编程1-WinInet1、WinInet类对FTP的支持FTP客户端编程也是主要以MFCWinInet为支撑的。WinInet提供了如图所示的Internet会话类CInternetSession、连接类CInternetConnection、文件类CInternetFile、文件操作类CFileFind,以及通用异常类CInternetException等。WindowsFTP编程1-WinInet为了能在编程中使用WinInet类的功能,需要在SelfFtpUpDownloaderDlg.h中包含头文件:#includeafxinet.h2、使用WindowsWinInet类FTP编程步骤①定义CInternetSession、CFtpConnection对象②建立网络会话并向服务器发起连接③获取文件目录④上传、下载文件⑤关闭连接3、详细实现步骤定义CInternetSession对象和CFtpConnection对象包含头文件、定义成员变量或者全局变量#includeafxinet.hCInternetSession*pInternetSession;CFtpConnection*pftpconnect;WindowsFTP编程1-WinInet建立网络会话并向服务器发起连接pInternetSession=newCInternetSession(AfxGetAppName(),1,PRE_CONFIG_INTERNET_ACCESS);//关联网络回话和应用程序Pftpconnect=pInternetSession-GetFtpConnection(“192.168.1.120”,“zhangsan”,“123456”,21);获取文件目录CFtpFileFindftpfind(m_pFtpConnection);intbFindFile=ftpfind.FindFile();while(bFindFile){bFindFile=ftpfind.FindNextFile();CStringstrfilename=ftpfind.GetFileName();}WindowsFTP编程1-WinInet上传、下载文件上传:pftpconnect-PutFile(“e:/test.jpg”,“test.jpg”);下载(应当判断服务器上该文件是否存在,在此为了简单只是下载代码):pftpconnect-GetFile(“童话_光良.mp3”,“e:/music/童话_光良.mp3”);关闭连接if(m_pFtpConnection!=NULL){m_pFtpConnection=NULL;}if(m_pInternetSession!=NULL){m_pInternetSession-Close();}•FTP介绍•WindowsIIS下FTP服务器搭建•WindowsFTP编程1-WinInet•WindowsFTP编程2-WinSock•其他介绍WindowsFTP编程2-WinSock1、WinSock介绍WinSock是Windows操作系统提供的socket网络编程的库,这里我们使用它进行FTP编程,可以采用两种方式——MFC封装的CSocket类和SOCKTE直接方式,其实前者也是在SOCKET直接方式的基础上封装的。其实二者的使用方式和WinInet(更高级的封装)基本相同。说明如果你操作过socket(TCP),应该明白客户端和服务器端的通信过程,在此FTP编程和它大致一样。所不同的是在其基础上,对数据的收发进行了相应的规定。下面一个简单的向服务器发起连接的例子进行说明://初始化套接字库WORDwVersionRequested;WSADATAwsaData;interr;wVersionRequested=MAKEWORD(2,2);err=WSAStartup(wVersionRequested,&wsaData);intnRet=0;//建立套接字m_Ctrlsok=socket(AF_INET,SOCK_STREAM,0);//建立套接字失败,则返回falseif(m_Ctrlsok==SOCKET_ERROR){nRet=closesocket(m_Ctrlsok);
本文标题:FTP编程
链接地址:https://www.777doc.com/doc-2872737 .html