版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第7章FTP应用编程7.1FTP概述7.2FTP规范7.3FTP编程相关类7.4FTP编程举例7.1FTP概述FTP(FileTransferProtocol,文件传输协议)是TCP/IP协议组中的协议之一,是Internet传递文件最主要的方法。FTP的主要功能如下:1.提供文件的共享,包括程序文件和数据文件;2.支持间接使用远程计算机;3.使用户不因各类主机文件存储器系统的差异而受影响;4.使用TCP提供可靠且有效的传输。
7.1FTP概述(续)FTP应用软件举例服务器举例:(1)IIS提供的FTP服务器
适合于用户数不太多(一般10个左右),功能相对简单的场合;(2)Serv-U
目前流行的FTP服务器软件,功能强大;(3)其他FTP服务器软件,例如SecureFTPServer等7.1FTP概述(续)客户端举例:(1)各类浏览器,比如IE、FireFox、Chrome等;
(用法:ftp://......)(2)
Windows自带“ftp”工具(命令行方式)(3)各类下载软件,常用的有:CuteFTPFlashFXP迅雷FlashGet电驴BT软件7.1.2FTP的工作原理通过FTP传输文件,双方至少需要建立两个TCP连接一个称为控制连接,用于传输FTP命令;一个称为数据连接,用于传输文件数据。建立控制连接后,用户通过客户机进程向服务器进程发送命令,服务器执行命令,然后将执行结果返回到客户端。7.1.1FTP的工作原理7.1.1FTP的工作原理以下载文件为例说明其工作原理7.1.1FTP的工作原理一般情况下,使用FTP传输文件时,客户端必须首先登录服务器,获得相应的权限以后才能上传或者下载文件。
比如实验室的FTP登录时需要进行身份验证有些场合下,服务器并不要求每个用户都拥有合法的账号,此时也就是允许匿名登录FTP。这些服务器的目的是向公众提供文件拷贝服务,匿名FTP是Internet上传输分发软件的一种基本方法。比如:redhat等公司提供的匿名访问站点
7.1.2FTP的数据传输方式FTP常用的两种数据传输方式:ASCII传输方式和二进制传输方式。1.ASCII传输方式
该方式以ASCII编码方式传输数据;适用于传输仅包含英文的命令和参数,或者在不同的平台间传输英文文本文件的场合。2.二进制传输方式
该方式以二进制形式数据传输时,可以指定采用哪种编码传输命令或文件数据。适用传输程序、带中文的文件的场合。7.1.3文件传输模式FTP客户端与服务器建立控制连接后,首先要告诉服务器采用哪种文件传输模式,即与服务器协商数据连接请求建立的方式。FTP提供两种文件传输模式主动模式(Port模式)
服务器主动向客户端发起数据连接请求;被动模式(PASV模式)
客户端向服务器发起数据连接请求;注意:主动和被动是从服务器的角度来说的;7.1.3文件传输模式1.主动模式(PORT模式)该模式表示服务器主动连接客户端,然后传输文件。连接建立过程:FTP客户端先用一个端口N(N>1024)向服务器的21号端口发起控制连接,连接成功后,再发出PORTN+1命令告诉服务器自己监听的端口号为N+1。服务器接收到PORT命令后,用一个新的数据端口(一般是20号端口)与客户端的端口N+1建立连接。服务器通过20端口进行文件数据传输,而客户端则通过监听N+1端口接收文件数据。主动模式——控制连接和数据连接建立工作步骤:(1)客户端的1026命令端口与服务器的21命令端口发起控制连接请求;客户端发出PORT1027命令给服务器,同时监听1027端口;(2)控制连接建立,服务器回复“ACK”确认消息。(3)服务器使用20数据端口与客户端的1027端口发起数据连接请求;(4)客户端给服务器返回“ACK”消息。7.1.3文件传输模式主动模式的特点FTP的客户端只是告诉服务器自己监听的端口,服务器主动与客户端监听的端口建立数据连接;可能存在的问题:对于客户端的防火墙来说,这是外部系统(服务器)发往内部系统(客户端)的连接;这通常会被阻塞。也就是说外部FTP服务器无法使用主动模式穿透防火墙主动连接客户端,就会造成文件数据无法传输;7.1.3文件传输模式2.被动模式(PASV,被动模式)该模式表示服务器被动接受客户端连接请求,即控制连接请求和数据连接请求都由客户端发起。在此模式下,FTP客户端先随机开启一个端口N向服务器的21号端口发起控制连接,然后向服务器发送PASV命令,服务器收到此命令后,会用一个新的端口P(P>1024)进行监听,同时将该端口号告诉客户端,客户端收到响应命令后,再通过新的端口N+1连接服务器的端口P,然后进行文件数据传输。
被动模式——控制连接和数据连接建立工作步骤:(1)客户端使用端口1026与服务器的21端口发起控制连接请求,同时向服务器发送PASV命令;(2)服务器收到命令后,将自己监听的端口2024告诉客户端。(3)客户端使用1027端口与服务器的2024端口发起连接请求;(4)连接建立,服务器回复确认消息;被动模式被动模式特点:控制连接和数据连接均是由客户端主动发起连接;服务器与客户端进行通信时,随机选择端口P(>1024)。可能存在问题:如果服务器安装防火墙,客户端可能无法与服务器的端口P建立数据连接请求;解决办法:实际应用中,一般服务器会指定一个端口范围,允许客户端与该范围内的端口建立数据连接。7.1.3文件传输模式主动模式和被动模式的异同共同点:服务器均使用21端口进行用户验证及管理;都有可能因防火墙的问题,造成数据连接无法建立;不同点:数据连接建立方式不同:主动模式服务器主动连接,被动模式由客户端主动连接。数据传送的端口不同:主动模式的FTP服务器的数据端口固定在20,被动模式的FTP服务器的数据端口则在1025-65535之间随机产生。7.2FTP规范7.2.1FTP命令7.2.2FTP响应码7.2.1FTP命令FTP每个命令都由3到4个字母组成,后面是该命令的参数,命令与参数之间用空格隔开。每个命令都以回车换行结束。部分命令举例:
1.访问命令(重点介绍USER、PASS、QUIT)
(1)USER命令 格式:USER<username>
功能:指定登录的用户名,以便服务器进行身份验证。此命令通常是控制连接后第一个发出的命令。7.2.1FTP命令(续)(2)PASS命令格式:PASS<password>功能:指定用户口令,该命令必须跟在登录用户名命令之后。对于需要用户口令的FTP服务器,它是完成访问控制不可缺少的一步。(3)QUIT命令格式:QUIT功能:关闭与服务器的连接。7.2.1FTP命令(续)其他访问命令:(4)ACCT命令格式:ACCT<account>功能:指定用户账号。此命令不需要和USER相关,服务器端可以设置客户端帐号,也可以限制账户访问权限。(5)REIN命令格式:REIN功能:表示重新初始化用户信息。此命令终止当前USER的传输,同时终止正在传输的数据,然后重置所有参数,并打开控制连接,以便客户端再次发送USER命令。7.2.1FTP命令(续)2.模式设置命令(1)PASV命令格式:PASV功能:该命令告诉FTP服务器,让FTP服务器在指定的数据端口进行监听,进入被动接收请求的状态。这种方式对于有代理服务器的客户端更安全,因为客户端代理服务器不必接受传入的连接。如果未指定任何模式,则FTP服务器默认使用PASV模式。7.2.1FTP命令(续)(2)PORT命令格式:PORT<address>功能:该命令告诉FTP服务器,客户端监听的端口号是address,让FTP服务器采用主动模式连接客户端。程序员可以对所有FTP服务器启用PORT模式,也可以仅对特定FTP服务器启用此模式。但是要注意,如果客户端代理服务器位于防火墙之后,使PORT模式不起作用,则无法启用PORT模式,此时可以尝试使用PASV模式。
7.2.1FTP命令(续)(3)TYPE命令格式:TYPE<datatype>功能:指定要传输的数据类型,有ASCII(A)和BINARY(I)两种类型。格式:MODE<mode>功能:指定传输模式,S表示流,B表示块,C表示压缩。例如:TYPEI//表示传输类型是Binary
MODES//传输模式是流7.2.1FTP命令(续)3.文件管理命令--------------改变目录相关的命令---------------CWD命令
格式:CWD<directory>功能:改变工作目录。此命令使用户可以在不同的目录或数据集下工作而不用改变它的登录或帐户信息,传输参数也不变。参数一般是目录名或与系统相关的文件集合。PWD命令:返回当前工作目录
格式:PWDCDUP命令:回到上层目录。格式:CDUP7.2.1FTP命令(续)--------------目录管理相关的命令--------------MKD命令:
格式:MKD<directory>功能:在指定路径下创建新目录,参数为表示特定目录的字符串。RMD命令:
格式:RMD<directory>功能:删除指定目录。参数为表示特定目录的字符串。7.2.1FTP命令(续)------------目录下目录和文件获取命令----------LIST命令格式:LIST<name>功能:返回指定路径下的子目录及文件列表,省略<路径>时,返回当前路径下的文件列表。如果路径名指定一个文件,服务器返回文件的当前信息,参数为空表示用户当前的工作目录或默认目录。NLST命令格式:NLST<directory>功能:返回指定路径下的目录列表,省略<路径>时,返回当前目录。7.2.1FTP命令(续)------------文件操作相关的命令----------RNFR命令(重命名命令)格式:RNFR<oldpath>功能:重新命名文件,该命令的下一条命令应该用RNTO指定新的文件名。RNTO命令格式:RNTO<newpath>功能:该命令和RNFR命令共同完成对文件的重命名。DELE命令格式:DELE<filename>功能:删除指定路径下的文件。7.2.1FTP命令(续)4.文件传输命令:包括RETR命令和STOR命令。(1)RETR命令格式:RETR<filename>功能:请求服务器将指定路径内的文件复制到客户端,也即下载指定的文件。(2)STOR命令格式:STOR<filename>功能:上传一个指定的文件,并将其存储在指定的位置。如果文件已存在,原文件将被覆盖。如果文件不存在,则创建新文件。7.2.2FTP响应码客户端发送FTP命令后,服务器返回约定的FTP响应码。响应码用三位数字编码表示:第一个数字给出有关命令状态的一般性指示;第二个数字指示所发生的常规错误类型;第三个数字提供了更为详细的信息。在实际使用时,只需要知道这三位组合在一起表示什么意思就可以了。部分响应码及其意义见表7-1。
7.2.2FTP响应码FTP响应码举例:控制连接请求:(1)服务器准备就绪则返回220;(2)如果服务器接收到命令但还需要时间准备则返回110;(3)其他情况下返回420。登录如果客户端接收到服务器端返回220响应码,便可以相继发送USER、PASS和ACCT命令登录。FTP客户登录以及响应码举例FTP客户登录以及响应码举例使用CuteFtp与FTP服务器建立连接的验证信息:状态:>[2012-5-1520:49:39]正在连接到FTP服务器...
8:21(ip=8)...状态:>[2012-5-1520:49:39]已连接套接字。正在等待欢迎信息...
[2012-5-1520:49:40]220FTPServerv1.0状态:>[2012-5-1520:49:40]已连接。正在验证身份...命令:>[2012-5-1520:49:40]USERmytestName [2012-5-1520:49:40]331USERcommandOK,passwordrequired.命令:>[2012-5-1520:49:40]PASS***** [2012-5-1520:49:40]230Userloggedinsuccess状态:>[2012-5-1520:49:40]登录成功。文件下载时命令与状态码举例文件下载时命令与状态码举例命令:> [2012-5-178:53:25]TYPEI [2012-5-178:53:25]200TypesettoI.命令:> [2012-5-178:53:25]PASV [2012-5-178:53:25]227EnteringPassiveMode(192,168,0,166,13,230)命令:> [2012-5-178:53:25]RETRC#中加载和卸载DLL.doc状态:>[2012-5-178:53:25]正在连接FTP数据套接字...66:3558...
[2012-5-178:53:25]150OpeningBINARYmodedataconnectionforC#中加载和卸载DLL.doc(27136Bytes).
[2012-5-178:53:25]226Transfercomplete.27,136bytes(3,726compressedto13.73%)transferred.117.38actualKB/sec,854.84effectiveKB/sec.状态:>[2012-5-178:53:25]文件传输完毕。上节内容回顾FTP的工作原理双TCP连接:控制连接和数据连接FTP的数据传输模式ASCII传输方式和二进制传输方式FTP的文件传输模式(数据连接的建立方式)主动模式(PORT)被动模式(PASV)FTP的命令与响应码命令(3-4个字母组成,空格隔开,回车换行结束)响应码(3位数字表示)7.3FTP编程相关类7.3.1FtpWebRequest类7.3.2FtpWebResponse类7.3.3NetworkCredential类7.3FTP编程相关类FTP应用程序一般编写方法:服务端实现方式:根据FTP的工作原理和命令,使用TCP协议实现FTP服务器(WinForm版)的功能;TCPListener、Socket...客户端实现方式:利用.NETFramework提供的封装类,简化FTP客户端程序的编写;TCPClient、Socket...FTP的封装类:FTPWebRequest、FtpWebResponse7.3.1FtpWebRequest类.NETFramework提供对FTP提供支持的类FtpWebRequest类用于实现文件传输协议(FTP)客户端功能,例如上传文件、下载文件等。FtpWebResponse类用于封装FTP服务器对请求的响应。例如操作的状态及从服务器下载的数据等。7.3.1FtpWebRequest类1.WebRequest类和WebResponse类请求/响应模型的抽象基类。FtpWebRequest和FtpWebResponse从这两个类派生。其他协议封装类:HTTP、File等均从此派生2.FtpWebRequest类
类对象的构造:先调用FtpWebRequest的Create方法,再经过强制转换得到FtpWebRequest的实例。该方法有两种重载形式:FtpWebRequest.Create(StringuriString)FtpWebRequest.Create(Uriuri)7.3.1FtpWebRequest类FtpWebRequest类对象构造举例例如://使用字符串FtpWebRequestreqFTP=(FtpWebRequest)FtpWebRequest.Create("ftp://myFTPServer/myFile");//使用Uri构造UrisiteUri=newUri("ftp://myFTPServer/myFile");FtpWebRequestreqFTP=(FtpWebRequest)FtpWebRequest.Create(siteUri);注意:uri可以相对也可以是绝对7.3.1FtpWebRequest类1.FtpWebRequest类的常用属性Credentials属性:获取或设置与FTP服务器通信的凭据(NetWorkCredential类型)NetworkCredential类用于为基于密码的身份验证方案提供凭据。该类可用于多种协议。在FTP中,用于提供FTP用户名和密码。如果FTP服务器不允许匿名访问,客户端必须向服务器提供用户名和密码。用法举例:NetworkCredential
networkCredential=newNetworkCredential(username,password);
request.Credentials=networkCredential;7.3.1FtpWebRequest类1.FtpWebRequest类的常用属性EnableSsl属性:指定是否使用SSL(安全套接字层)连接KeepAlive属性:指示请求完成后是否保持连接Method属性:获取或设置发往FTP服务器的命令,通过WebRequestMethods.Ftp枚举指定;UseBinary属性:获取或指定是否采用二进制传输7.3.1FtpWebRequest类2.FtpWebRequest类的常用方法Create方法初始化新的WebRequest实例GetResponse方法返回FTP服务器响应,返回值为WebResponse对象GetRequestStream方法检索用于向FTP服务器上载数据的流;实现文件上传时在获取响应前使用此方法;7.3.1FtpWebRequest类FtpWebRequest类的使用步骤1.创建FtpWebRequest对象2.设置FtpWebRequest对象的相关属性Credentials属性(凭据)KeepAlive属性(是否保持连接)UseBinary(是否使用二进制)Method(操作命令)3.根据设置的操作命令,获得服务器的响应,决定下一步执行的动作。4.关闭对象FtpWebRequest类使用举例//第一步:创建对象FtpWebRequestrequest=(FtpWebRequest)FtpWebRequest.Create(ftpUriString);//第二步:设置对象的属性NetworkCredentialnetworkCredential=newNetworkCredential(UserName,Password);request.Credentials=networkCredential;request.KeepAlive=true;request.UseBinary=true;request.Method=WebRequestMethods.Ftp.ListDirectoryDetails;//第三步:获得服务器的响应,确定下一步的动作FtpWebResponseresponse=(FtpWebResponse)request.GetResponse();…request.Close();//第四步:关闭对象7.3.2FtpWebResponse类FtpWebResponse类
封装文件传输协议(FTP)服务器对请求的响应。1.FtpWebResponse类对象构造没有构造函数,只能通过调用FtpWebRequest对象的GetResponse方法获取;返回对象必须强制转换为FtpWebResponse类型。例如:FtpWebRequestrequest=(FtpWebRequest)FtpWebRequest.Create(ftpUriString);FtpWebResponseresponse=(FtpWebResponse)request.GetResponse();7.3.2FtpWebResponse类2.FtpWebResponse类的常用属性和方法StatusCode属性获取从FTP服务器上发回的最新状态代码StatusDescription属性获取从FTP服务器上发回的状态代码文本信息Close方法关闭响应流GetResponseStream方法检索包含从FTP服务器上发送的响应数据的流;实现下载功能时使用此此方法;FtpWebResponse对象使用举例FtpWebResponse类的使用步骤1.创建FtpWebResponse对象
FtpWebRequestrequest=(FtpWebRequest)FtpWebRequest.Create(ftpUriString);FtpWebResponseresponse=(FtpWebResponse)request.GetResponse();2.根据request对象的命令类型,确定下一步的动作StreamresponseStream=response.GetResponseStream();…3.关闭对象
response.Close();7.4FTP编程举例7.4.1服务器端开发7.4.2客户端开发7.4FTP编程举例服务端运行界面客户端运行界面7.4.2客户端开发客户端程序只要符合FTP规范,并拥有合法的用户名和密码,就可以与多个规范的FTP服务器通信。.NET提供的FtpWebRequest类中,有一个Method属性,可以利用该属性获取或设置要发送到FTP服务器的命令(默认值为DownloadFile)。FTP命令用WebRequestMethods.Ftp类表现出来,目前提供的命令包含了常用的FTP常用方法。本节例子演示了FTP应用的常用功能(见下页设计界面)
7.4.2客户端开发—设计界面图7-5单击建立连接后运行界面图7-3FTP客户端设计界面7.4.2客户端开发客户端实现要点1.创建FtpWebRequest对象
CreateFtpWebRe
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 《新型肥料对蓝莓果实品质与土壤微生物代谢活性的关系研究》教学研究课题报告
- 2025年河南中医药大学马克思主义基本原理概论期末考试模拟试卷
- 2025年荆州理工职业学院马克思主义基本原理概论期末考试模拟试卷
- 2024年辽宁中医药大学杏林学院马克思主义基本原理概论期末考试真题汇编
- 第04讲 利用导数研究函数的零点(方程的根) 高频考点精练(原卷版)
- 2024年南京邮电大学通达学院马克思主义基本原理概论期末考试真题汇编
- 2024年重庆城市职业学院马克思主义基本原理概论期末考试笔试题库
- 2025年湖南城建职业技术学院马克思主义基本原理概论期末考试真题汇编
- 2024年中原科技学院马克思主义基本原理概论期末考试笔试题库
- 2025年河南轻工职业学院马克思主义基本原理概论期末考试笔试题库
- DB46-T 481-2019 海南省公共机构能耗定额标准
- 神经介入进修汇报课件
- 感染患者终末消毒操作规范
- 学生公寓物业管理服务服务方案投标文件(技术方案)
- 脑供血不足病人的护理查房-课件
- 文控文员工作总结
- 团体团建跳舞活动方案
- 食品加工企业主要管理人员及工程技术人员的配备计划
- 儿童语言发育迟缓课件
- 2025至2030年中国汽车用碳纤维行业竞争格局分析及市场需求前景报告
- 焊接作业指导书完整版
评论
0/150
提交评论