第07章 FTP应用编程
计算机网络实验实验7FTP服务器与FTP客户端工具使用实验

哈尔滨工程大学《网络实验》
实验报告本
2014~2015学年第二学期
班级
姓名
学号
实验名称FTP服务器与FTP客户端工具使用实验
计算机与技术学院
2015年06 月
下载访问我的FTP
五、实验收获、思考与改进
通过这次实验,我学会了用FTP Server的软件,同时可以在自己的FTP中设置了自己的界面。
通过设立FTP服务器,我成功的学会了怎样在FTP上添加文件以便共享。
本次实验时最后一次实验,总觉得计算机网络实验这门课程十分有必要,这门课能够让我们走进我们中的网络,让我们明白我们平日上网时也可能是不安全的,希望以后有机会还能上您的课。
在此,祝老师身体健康,
作顺利!!!。
FTP命令使用详解

FTP命令使用详解FTP(File Transfer Protocol,文件传输协议)是一种用于在网络上进行文件传输的协议。
它使用客户端-服务器模型来传输文件,客户端通过FTP命令与服务器建立连接并发送命令来进行文件操作。
FTP命令可以分为两类:原始FTP命令和扩展FTP命令。
原始FTP命令是FTP协议定义的基本命令,如USER、PASS、LIST、RETR和STOR等;扩展FTP命令是在原始FTP命令的基础上添加的一些功能性命令,如MKD、RMD、RNFR、RNTO和SIZE等。
下面是一些常用的FTP命令及其使用详解:1. USER:用于指定登录FTP服务器的用户名。
语法:USER username示例:USER alice说明:发送用户名给服务器进行验证。
2. PASS:用于指定登录FTP服务器的密码。
语法:PASS password说明:发送密码给服务器进行验证。
3. LIST:用于列出当前目录下的文件和子目录。
语法:LIST [dirname]示例:LIST /pub说明:如果指定了dirname参数,则列出该目录下的文件和子目录;如果未指定,则列出当前目录下的文件和子目录。
示例:RETR myfile.txt5. STOR:用于将本地计算机上的文件上传到远程服务器。
语法:STOR filename示例:STOR myfile.txt说明:将本地计算机上的名为myfile.txt的文件上传到服务器。
6. MKD:用于在远程服务器上创建新目录。
语法:MKD dirname示例:MKD newdir说明:在服务器上创建一个名为newdir的新目录。
7. RMD:用于在远程服务器上删除指定目录。
语法:RMD dirname示例:RMD olddir说明:在服务器上删除名为olddir的目录。
8. RNFR和RNTO:用于重命名远程服务器上的文件或目录。
语法:RNFR oldname; RNTO newname示例:RNFR oldfile.txt; RNTO newfile.txt说明:将服务器上的名为oldfile.txt的文件重命名为newfile.txt。
pythonftp编程

pythonftp编程Python FTP编程是指使用Python编程语言来实现与FTP(文件传输协议)服务器交互的过程。
FTP是一种用于在计算机之间进行文件传输的标准协议。
通过FTP编程,我们可以实现文件上传、下载、删除等操作。
本文将一步一步回答关于Python FTP编程的问题,以帮助读者了解这个主题并开始进行FTP服务器的操作。
第一步:安装FTP库在开始Python FTP编程之前,我们需要安装ftplib库,通过以下命令来安装:pip install ftplib安装完毕后,我们可以使用该库的函数和方法来实现FTP操作。
第二步:连接到FTP服务器连接到FTP服务器是FTP编程的第一步。
在Python中,我们可以使用ftplib.FTP类的实例来实现连接。
以下是一个连接到FTP服务器的示例代码:pythonimport ftplib# 连接到FTP服务器ftp = ftplib.FTP("ftp.server")ftp.login("username", "password")在上面的代码中,我们使用ftp.server作为FTP服务器的地址,"username"和"password"分别表示FTP服务器的用户名和密码。
请根据实际情况修改这些值。
第三步:上传文件到FTP服务器上传文件是FTP编程中的一个常见操作。
使用Python的ftplib库,我们可以通过以下代码将本地文件上传到FTP服务器:pythonimport ftplib# 连接到FTP服务器ftp = ftplib.FTP("ftp.server")ftp.login("username", "password")# 打开本地文件file = open("local_file.txt", "rb")# 上传文件到FTP服务器ftp.storbinary("STOR remote_file.txt", file)# 关闭本地文件和FTP连接file.close()ftp.quit()在上面的代码中,我们首先用"rb"模式打开本地文件local_file.txt,然后使用ftp.storbinary()方法将文件上传到FTP服务器。
FTP编程

TNMFTP组件的主要属性(续4)
TimeOut属性 超时设定,指定一个毫秒数值,如果超过该值规定的时间
SOCKET还没有响应,则将触发异常。 TransactionReply属性 返回上一次命令的执行结果。 UserID 属性 给出登录FTP服务器时的用户名。 Vendor属性 一般设定为NMOS-AUTO,表示让TNMFTP自动对文件的属性进 行分析。
TNMFTP组件的主要属性(续2)
ParseList属性 该属性如果设为TRUE,就可以从FTPDirectoryList属性中得到文件的详
细资料(包括文件名、文件大小、文件类型、文件最后修改日期)。 Password属性 在登录到FTP服务器时需要给出用户名和口令。该特性用于给出口令。 匿名登录时客户端软件也可以随便指定一个包含“@”的邮件地址。 Port属性 指定FTP服务器的端口号,默认值是21。 Proxy属性 指定代理服务器的主机名或者是IP地址。在不需要代理服务器的情况下, 该数值为空值。 ProxyPort属性 指定代理服务器的端口号。在不需要代理服务器的情况下,该数值为空 值。
Delphi程序设计
FTP编程
FTP 协议 NMFTP组件 操作实例
FTP服务器的编程及应用(jsj139)

完成一个简单FTP服务器的编程及应用。
实现的功能包括:上传、下载、选择数据传输模式、改变目录等,并给出相应的提示。
目录引言 (1)正文 (2)第一章FTP协议分析 (2)1.1FTP工作原理 (2)1.1.1基本名词 (2)1.1.2FTP的工作原理图 (3)1.2FTP标准命令 (4)1.3FTP标准回答 (5)第二章FTP程序设计 (6)2.1任务要求 (6)2.1.1设计题目 (6)2.1.2设计目的 (6)2.2程序模块化设计 (6)2.2.1程序设计思想 (6)2.2.2重叠模型 (6)2.2.3程序流程图 (9)第三章详细设计 (10)3.1main()函数 (10)3.2工作线程函数设计 (14)3.2.1工作线程程序流程图 (14)3.2.2工作线程具体设计 (15)3.3命令处理函数设计 (17)3.4其他函数 (25)第四章结论..................................26参考文献 (27)附录 (28)致谢······································62摘要本程序主要用于简单服务器的管理,包括文件的上传、下载、列出目录、改变目录、改变传输方式等功能。
通过该程序的开发,基本上实现了一个FTP服务器的功能,能够解释一般的FTP命令,并且符合RFC959规范。
本程序采用VC++6.0作为开发工具,设计步骤采用自顶向下的方法。
关键词:上传、下载、列出目录、改变目录、改变传输方式、FTP服务器引言从根本上说,FTP就是在网络中各种不同的计算机之间按照TCP/IP协议来传输文件。
FTP应用编程.doc

实验八 FTP应用编程一、实验目的:1、了解FTP工作原理及主要命令。
2、熟悉WinInet组成类及作用。
3、理解基于WinInet的FTP应用编程流程。
4、掌握FTP应用编程方法。
二、主要仪器设备:●硬件:处理器:Pentium 233 MHz或更高处理器;内存:128 MB RAM或更高;硬盘空间:至少130 MB可用硬盘空间。
●软件:Windows XP、Professional等操作系统、VC++.NET2005。
三、实验内容:设计一个程序实现对指定FTP服务器的登录、显示FTP服务器中指定目录的文件列表、选定文件下载、以及指定文件上传等操作。
四、实验步骤及结果:1、主要程序代码:##include"StdAfx.h"#include"MyFTPClient.h"const int BUF_SIZE = 4096 ;CMyFTPClient::CMyFTPClient(void){// Set the timeout value to 30 secondsm_InternetSession.SetOption (INTERNET_OPTION_CONNECT_TIMEOUT, 100);m_InternetSession.SetOption (INTERNET_OPTION_RECEIVE_TIMEOUT, 100);m_InternetSession.SetOption (INTERNET_OPTION_SEND_TIMEOUT, 100);m_pFtpConnection = NULL;m_hEventKill = CreateEvent (NULL, TRUE, FALSE, NULL);}CMyFTPClient::~CMyFTPClient(void){if (m_pFtpConnection != NULL){m_pFtpConnection->Close ();delete m_pFtpConnection;m_pFtpConnection = NULL;m_sFTPRootFolder.Empty ();}}bool CMyFTPClient::IsInitialized(){if (m_pFtpConnection != NULL)return true;elsereturn false;}bool CMyFTPClient::Login (const CString &sHost, const CString &sUsername, const CString &sPassword, BOOL bPASV, int nPort, int nRetries, int nRetryDelay){bool rr = false ;int nRetryCount = 0 ;if (m_pFtpConnection == NULL){while (nRetryCount < nRetries){//连接指定的FTP服务器m_pFtpConnection = m_InternetSession.GetFtpConnection (sHost, sUsername, sPassword, nPort, bPASV);if (m_pFtpConnection != NULL) //获取当前目录{m_pFtpConnection->GetCurrentDirectory (m_sFTPRootFolder);break;}nRetryCount ++;}}rr = (nRetryCount < nRetries);return rr ;}void CMyFTPClient::Logoff(){if (m_pFtpConnection != NULL){m_pFtpConnection->Close ();delete m_pFtpConnection;m_pFtpConnection = NULL;m_sFTPRootFolder.Empty ();}}//设置FTP服务器的当前目录bool CMyFTPClient::ChangeCurrentDir(const CString sRemoteDir){bool rr = false ;if (m_pFtpConnection != NULL){m_pFtpConnection->SetCurrentDirectory(sRemoteDir);rr = true ;}return rr ;}//下载指定文件到本地bool CMyFTPClient::Download (const CString &sRemoteFile, const CString &sLocalFile, bool pbAbort,DWORD dwTransferType){bool rr = false ;if (m_pFtpConnection != NULL){CString sSource (sRemoteFile);CString sDestPath (sLocalFile);CFile file;// 打开本地文件if (file.Open(sDestPath, CFile::modeCreate | CFile::modeWrite, NULL)){//打开远程资源文件CInternetFile* pInternetFile = m_pFtpConnection->OpenFile (sSource, GENERIC_READ, dwTransferType);if (pInternetFile){char buffer[BUF_SIZE];unsigned int nRead = BUF_SIZE;//读取文件while ( (nRead == BUF_SIZE) && (WaitForSingleObject(m_hEventKill, 0) == WAIT_TIMEOUT) &&(!pbAbort) ){// read remote data into buffernRead = pInternetFile->Read (buffer, BUF_SIZE);// write buffer to data filefile.Write (buffer, nRead);}//关闭远程资源文件pInternetFile->Close ();delete pInternetFile;rr = true ;}// 关闭本地文件file.Close ();}}return rr ;}//上载指定文件到FTP根目录bool CMyFTPClient::Upload (const CString &sLocalFile, bool pbAbort, DWORD dwTransferType){bool rr = false ;if (m_pFtpConnection != NULL){CFile file;//打开本地文件if (file.Open (sLocalFile, CFile::modeRead, NULL)){CInternetFile* pInternetFile = m_pFtpConnection->OpenFile (file.GetFileName (), GENERIC_WRITE);if (pInternetFile){//定义读写缓存char buffer [BUF_SIZE];unsigned int nRead = BUF_SIZE;//读写文件while ( nRead == BUF_SIZE && (WaitForSingleObject(m_hEventKill, 0) == WAIT_TIMEOUT) && (!pbAbort) ){// read data into buffernRead = file.Read (buffer, BUF_SIZE);// write buffer to remote data filepInternetFile->Write (buffer, nRead);}//关闭远程资源文件pInternetFile->Close();delete pInternetFile;rr = true ;}// 关闭本地文件file.Close();}}return rr ;}//查找FTP服务器当前目录下的所有文件bool CMyFTPClient::GetFileList (CStringArray &sFileNameArray, bool bExcludeHidden) {bool rr = false ;CString sFileName;if (m_pFtpConnection != NULL){CFtpFileFind ftpFind (m_pFtpConnection); //创建CFtpFileFind对象bool bContinue = ftpFind.FindFile (NULL); //查找FTP当前根目录文件if (!bContinue){ftpFind.Close ();return rr;}// 将所检索到的文件追加到文件列表中while (bContinue){bContinue = ftpFind.FindNextFile ();if (ftpFind.IsDots()) continue; //过滤目录名else{if (! (bExcludeHidden && ftpFind.IsHidden ())){sFileName = ftpFind.GetFilePath();sFileNameArray.Add (sFileName);rr = true ;}}}ftpFind.Close ();}return rr ;}。
ftp命令语法

FTP(文件传输协议)是一种用于在网络上进行文件传输的协议。
在FTP命令中,可以使用各种选项和参数来控制文件传输的过程。
以下是一些常见的FTP命令及其语法和用途:1. `ftp`:启动FTP会话并连接到FTP服务器。
语法:`ftp [服务器地址]`用途:指定要连接的FTP服务器地址。
2. `open`:打开到FTP服务器的连接。
语法:`open [服务器地址]`用途:打开到指定FTP服务器的连接,允许后续的文件传输操作。
3. `list`:列出服务器上的目录内容。
语法:`list [目录路径]`用途:列出指定目录中的文件和子目录列表。
4. `cd`:切换当前工作目录。
语法:`cd [目录路径]`用途:切换到指定的FTP服务器上的目录。
5. `get`:下载文件。
语法:`get [本地文件路径] [远程文件路径]`用途:从FTP服务器下载文件到本地计算机。
6. `put`:上传文件。
语法:`put [远程文件路径] [本地文件路径]`用途:将本地计算机上的文件上传到FTP服务器。
7. `quit`:结束FTP会话。
语法:`quit`用途:结束当前进行的FTP会话并关闭到FTP服务器的连接。
以下是针对以上命令的一些示例和解释:示例1:使用ftp命令连接到FTP服务器并验证连接成功。
```cssftp [服务器地址]```解释:这会启动一个到指定FTP服务器的连接,并尝试验证连接是否成功。
如果连接成功,通常会显示服务器的欢迎信息。
示例2:使用list命令列出服务器上的目录内容。
```phplist /path/to/directory```解释:这会显示指定目录中的文件和子目录列表。
例如,如果你想列出当前工作目录的内容,可以使用类似以下的命令:`list .`。
示例3:使用get命令下载文件到本地计算机。
```phpget /path/to/remote/file.txt [本地文件路径]```解释:这会将远程服务器上的文件"file.txt"下载到本地计算机的指定位置。
第07章 FTP应用编程

23
7.2.1
FTP命令(续)
(2)PORT命令
格式:PORT <address>
功能:该命令告诉FTP服务器,客户端监听的端口号 是address,让FTP服务器采用主动模式连接客户端。 程序员可以对所有FTP服务器启用PORT模式,也可以 仅对特定FTP服务器启用此模式。但是要注意,如果 客户端代理服务器位于防火墙之后,使PORT模式不起 作用,则无法启用PORT模式,此时可以尝试使用PASV 模式。
24
7.2.1
FTP命令(续)
(3)TYPE命令
格式:TYPE < data type>
功能:指定要传输的数据类型,有ASCII(A)和BINARY (I)两种类型。 格式:MODE <mode> 功能:指定传输模式,S表示流,B表示块,C表示压缩。
例如:
TYPE I MODE S //表示传输类型是Binary //传输模式是流
4
7.1 FTP概述(续)
客户端举例: (1)各类浏览器,比如IE、FireFox、Chrome等;
(用法:ftp://......)
(2) Windows自带“ftp”工具(命令行方式) (3)各类下载软件,常用的有: CuteFTP FlashFXP 迅雷 FlashGet 电驴 BT软件
14
7.1.3
文件传输模式
2. 被动模式 (PASV,被动模式)
该模式表示服务器被动接受客户端连接请求,即控制 连接请求和数据连接请求都由客户端发起。
在此模式下,FTP客户端先随机开启一个端口N向服 务器的21号端口发起控制连接,然后向服务器发送PA SV命令,服务器收到此命令后,会用一个新的端口P (P>1024)进行监听,同时将该端口号告诉客户端, 客户端收到响应命令后,再通过新的端口N+1连接服 务器的端口P,然后进行文件数据传输。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
26
7.3
FTP编程相关类
7.3.1 7.3.3
FtpWebRequest类 NetworkCredential类
7.3.2 FtpWebResponse类
27
7.3.1
FtpWebRequest类
FtpWebRequest类用于实现文件传输协议 (FTP) 客户端功 能,例如上传文件、下载文件等。 用法: 先用FtpWebRequest的Create方法得到FtpWebRequest的实 例。该方法有两种重载形式: FtpWebRequest.Create (String uriString) FtpWebRequest.Create (Uri uri)
20
7.2.1
FTP命令(续)
4.文件传输命令:包括RETR命令和STOR命令。
(1)RETR命令
格式:RETR <filename> 功能:请求服务器将指定路径内的文件复制到客户端,也 即下载指定的文件。 (2)STOR命令 格式:STOR <filename> 功能:上传一个指定的文件,并将其存储在指定的位置。 如果文件已存在,原文件将被覆盖。如果文件不存在,则 创建新文件。
1
第7章 FTP应用编程
7.1 FTP概述
7.2
7.3 7.4
FTP规范
FTP编程相关类 FTP编程举例
2
第7章 FTP应用编程(续)
本章教学目的
通过学习,使学生能够对FTP编程基础知识及思路有个清晰的认识。
本章教学要求
(1)掌握FTP工作原理、数据传输方式 (2)了解FTP规范(命令及响应吗) (3)掌握两种文件传输模式下服务器与客户端的工作流程。 (4)掌握FTP编程涉及的相关类及FTP重要功能的实现
2. 支持间接使用远程计算机;
3. 使用户不因各类主机文件存储器系统的差异而受影响; 4. 使用TCP提供可靠且有效的传输 。
4
7.1 FTP概述(续)
FTP应用软件举例 服务器举例: (1)IIS提供的FTP服务器 (2)Serv-U (3)其他FTP服务器软件,例如Secure FTP Server、 客户端举例: (1)IE浏览器(用法:ftp://......) (2)CuteFTP ,例如CuteFTP 7 Professional (3)FlashFXP
13
7.2.1
FTP命令(续)
(4)REIN命令
格式:REIN
功能:表示重新初始化用户信息。此命令终止当前USER的 传输,同时终止正在传输的数据,然后重置所有参数,并 打开控制连接,以便客户端再次发送USER命令。 (5)QUIT命令 格式:QUIT 功能:关闭与服务器的连接。
14
FTP响应码
第2个数字指示所发生的常规错误类型,含义如下。
0表示语法。
1表示系统状态与信息。 2表示与FTP服务器系统连接状态。 3表示与用户认证有关的信息。 4表示未定义。 5表示与文件系统有关的信息。
24
7.2.2
FTP响应码
第3个数字提供了更为详细的信息。
在实际使用时,只需要知道这3位组合在一起表示什么意思 就可以了。
●
● ● ● ●
FTP响应码
第1个数字给出有关命令状态的一般性指示,含义如下。
1表示信息已被服务器正确接受,但尚未被处理。
2表示信息已被服务器正确处理完毕。 3表示信息已被服务器正确接受,并正在处理中。 4表示信息处理错误(暂时)。 5表示信息处理错误(永久)。
23
7.2.2
●
● ● ● ● ●
21
7.2.2
FTP响应码
客户端发送FTP命令后,服务器返回约定的FTP响应码
响应码用三位数字编码表示:
第一个数字给出有关命令状态的一般性指示 第二个数字指示所发生的常规错误类型 第三个数字提供了更为详细的信息。 在实际使用时,只需要知道这三位组合在一起表示什么意 思就可以了。
22
7.2.2
注意:由于某些客户端可能会运行防火墙,从而使PASV模 式对客户端代理服务器不起作用。因此,可将客户端代理 服务器配置为使用PORT模式。
15
7.2.1
FTP命令(续)
(2)PORT命令
格式:PORT < address>
功能:该命令告诉FTP服务器,客户端监听的端口号是addr ess,让FTP服务器采用主动模式连接客户端。
7.2.1
FTP命令(续)
2.模式设置命令
(1)PASV命令
格式:PASV 功能:该命令告诉FTP服务器,让FTP服务器在指定的数据 端口进行监听,进入被动接收请求的状态。这种方式对于 有代理服务器的客户端更安全,因为客户端代理服务器不 必接受传入的连接。
如果未指定任何模式,则FTP服务器默认使用PASV模式。
(4)各类下载软件(迅雷、FlashGet、电驴、BT)等理
FTP常用的的两种传输方式:
ASCII传输方式
以ASCII编码方式传输数据,一般用于传输命令,或者不同 平台间的文本文件。
二进制数据传输方式
采用该方式进行数据传输时,可以指定采用哪种编码,一 般用于传输具有原始格式的文件。
表7-1列出了部分响应码及其意义。
25
7.2.2
FTP响应码
控制连接连接请求:
(1)服务器准备就绪则返回220
(2)如果服务器接收到命令但还需要时间准备则返回110 (3)其他情况下返回420。 登录 (1)如果客户端接收到服务器端返回220响应码,便可以相 继发送USER、PASS和ACCT命令登录。
18
7.2.1
FTP命令(续)
3.文件管理命令
(6)LIST命令
格式:LIST <name> 功能:返回指定路径下的子目录及文件列表,省略<路径>时, 返回当前路径下的文件列表。如果路径名指定一个文件,服 务器返回文件的当前信息,参数为空表示用户当前的工作目 录或默认目录。
(7)NLST命令
格式:NLST <directory> 功能:返回指定路径下的目录列表,省略<路径>时,返回当 前目录。
19
7.2.1
FTP命令(续)
(8)RNFR命令 格式:RNFR <old path> 功能:重新命名文件,该命令的下一条命令应该用RN TO指定新的文件名。
(9)RNTO命令 格式:RNTO <new path> 功能:该命令和RNFR命令共同完成对文件的重命名,紧跟 在RNFR命令后。 (10)DELE命令 格式:DELE < filename > 功能:删除指定路径下的文件。
2.二进制传输方式
采用该方式进行数据传输时,可以指定采用哪种编码传输命 令或文件数据。如果传输的文件不是英文文本文件,或者传 输的命令参数中带有中文信息,则应该采用二进制传输方式。
9
7.1.3
文件传输模式
FTP支持两种工作模式: Port模式 (主动模式) 该模式表示服务器主动连接客户端,然后传输文件。在此模式 下,FTP客户端先用一个端口N(N>1024)向服务器的21号端口发起 控制连接,连接成功后,再发出PORT N+1命令告诉服务器自己监听 的端口号为N+1。服务器接收到该命令后,用一个新的数据端口(一 般是20号端口)与客户端的端口N+1建立连接,然后进行文件数据传 输,而客户端则通过监听N+1端口接收文件数据。 Passive模式 (PASV,被动模式) 该模式表示服务器被动接受客户端连接请求,即控制连接请求 和数据连接请求都由客户端发起。在此模式下,FTP客户端先随机开 启一个端口N向服务器的21号端口发起控制连接,然后向服务器发送 PASV命令,服务器收到此命令后,会用一个新的端口P(P>1024)进 行监听,同时将该端口号告诉客户端,客户端收到响应命令后,再 通过新的端口N+1连接服务器的端口P,然后进行文件数据传输。
功能:指定要传输的数据类型,有ASCII和BINARY。 格式:MODE <mode> 功能:指定传输模式,S表示流,B表示块,C表示压缩。
17
7.2.1
FTP命令(续)
3.文件管理命令
(1)CWD命令:CWD <directory>
功能:改变工作目录。此命令使用户可以在不同的目录或 数据集下工作而不用改变它的登录或帐户信息,传输参数 也不变。参数一般是目录名或与系统相关的文件集合。 (2)PWD命令:PWD 返回当前工作目录。 (3)MKD命令:MKD <directory>在指定路径下创建新目录, 参数为表示特定目录的字符串。 (4)CDUP命令:回到上层目录。 (5)RMD命令:RMD < directory >:删除指定目录。参数为 表示特定目录的字符串。
6
7.1.2
FTP的工作模式
通过FTP传输文件,双方至少需要建立两个TCP连接
一个称为控制连接,用于传输FTP命令;
称为数据连接,用于传输文件数据。
建立控制连接后,用户通过客户机进程向服务器进程发送 命令,服务器执行命令,然后将执行结果返回到客户端,
7
7.1.2
FTP的工作模式
1.用户启动FTP客户端程序,通过操作界面连接服务器并下 载文件时,客户端首先与服务器的21端口建立控制连接. 2.客户端提供用户名和密码,经服务器验证认为合法后, 客户端将自己监听的端口号告诉服务器,服务器再与客户 端建立数据连接。 3.客户端通过控制连接向服务器发送下载文件的命令,服 务器接收到命令后,若执行成功,通过控制连接向客户端 发送响应码,并将文件数据通过数据连接返回给客户端, 否则仅返回响应码。