使用c++实现一个FTP客户端(一)
之前使用c++实现了一个FTP客户端,在这里做一些记录。
一、需要注意的几点
①FTP是一种文件传输协议,基于TCP,所以客户端与服务器建立的连接是可靠、安全的,并且要经过三次握手的过程。
②FTP传输数据默认采用二进制模式,即将文件内容转换为二进制表示后再传送,而若HTML等文本文件传输时需要转换成ASCII模式。
③FTP客户端在连接服务器时需要用到两个端口,其中一个端口(默认为21)用作控制连接端口,负责发送命令和等待响应;另一个端口用作数据传输,用来建立数据传输通道,端口号为20或其他可用端口号。
④FTP有两种连接模式:主动模式与被动模式。主动模式命令为PORT,此模式下客户端需要向服务器提供一个IP地址和端口号,由服务器来连接客户端的指定端口;被动模式命令为PASV,此模式下由服务器向客户端提供IP地址与端口号,由此解决主动模式下服务
器到客户端的数据端口的连接被防火墙过滤掉的问题。
⑤FTP的工作流程为:客户端连接服务器->服务器连接成功返回->客户端发送初始化命令->服务器响应命令成功返回->客户端发送用户验证消息->服务器返回验证结果->验证通过,客户端进行数据操作->服务器响应客户端操作命令->客户端发送关闭连接命令-
>服务器响应关闭连接命令。
⑥通常FTP服务器只负责进行数据连接,在客户端发送命令要求关闭连接时,服务器才会关闭连接。但在以下情况服务器也会关闭数据连接:
1.服务器发送数据结束,通过EOF文件结束标志终止传送。
2.客户端发送ABORT命令。
3.客户端改变了端口号。
4.控制连接通道被关闭。
5.传输过程中发生严重错误。
⑦FTP命令与响应码:
命令 | 描述 |
ABOR | 中断数据连接程序 |
ACCT <account> | 系统特权帐号 |
ALLO <bytes> | 为服务器上的文件存储器分配字节 |
APPE <filename> | 添加文件到服务器同名文件 |
CDUP <dir path> | 改变服务器上的父目录 |
CWD <dir path> | 改变服务器上的工作目录 |
DELE <filename> | 删除服务器上的指定文件 |
HELP <command> | 返回指定命令信息 |
LIST <name> | 如果是文件名列出文件信息,如果是目录则列出文件列表 |
MODE <mode> | 传输模式(S=流模式,B=块模式,C=压缩模式) |
MKD <directory> | 在服务器上建立指定目录 |
NLST <directory> | 列出指定目录内容 |
NOOP | 无动作,除了来自服务器上的承认 |
PASS <password> | 系统登录密码 |
PASV | 请求服务器等待数据连接 |
PORT <address> | IP 地址和两字节的端口 ID |
PWD | 显示当前工作目录 |
QUIT | 从 FTP 服务器上退出登录 |
REIN | 重新初始化登录状态连接 |
REST <offset> | 由特定偏移量重启文件传递 |
RETR <filename> | 从服务器上找回(复制)文件 |
RMD <directory> | 在服务器上删除指定目录 |
RNFR <old path> | 对旧路径重命名 |
RNTO <new path> | 对新路径重命名 |
SITE <params> | 由服务器提供的站点特殊参数 |
SMNT <pathname> | 挂载指定文件结构 |
STAT <directory> | 在当前程序或目录上返回信息 |
STOR <filename> | 储存(复制)文件到服务器上 |
STOU <filename> | 储存文件到服务器名称上 |
STRU <type> | 数据结构(F=文件,R=记录,P=页面) |
SYST | 返回服务器使用的操作系统 |
TYPE <data type> | 数据类型(A=ASCII,E=EBCDIC,I=binary) |
USER <username>> | 系统登录的用户名 |
响应代码 | 解释说明 |
110 | 新文件指示器上的重启标记 |
120 | 服务器准备就绪的时间(分钟数) |
125 | 打开数据连接,开始传输 |
150 | 打开连接 |
200 | 成功 |
202 | 命令没有执行 |
211 | 系统状态回复 |
212 | 目录状态回复 |
213 | 文件状态回复 |
214 | 帮助信息回复 |
215 | 系统类型回复 |
220 | 服务就绪 |
221 | 退出网络 |
225 | 打开数据连接 |
226 | 结束数据连接 |
227 | 进入被动模式(IP 地址、ID 端口) |
230 | 登录因特网 |
250 | 文件行为完成 |
257 | 路径名建立 |
331 | 要求密码 |
332 | 要求帐号 |
350 | 文件行为暂停 |
421 | 服务关闭 |
425 | 无法打开数据连接 |
426 | 结束连接 |
450 | 文件不可用 |
451 | 遇到本地错误 |
452 | 磁盘空间不足 |
500 | 无效命令 |
501 | 错误参数 |
502 | 命令没有执行 |
503 | 错误指令序列 |
504 | 无效命令参数 |
530 | 未登录网络 |
532 | 存储文件需要帐号 |
550 | 文件不可用 |
551 | 不知道的页类型 |
552 | 超过存储分配 |
553 | 文件名不允许 |
使用c++实现一个FTP客户端(一)相关推荐
- Winform中实现FTP客户端并定时扫描指定路径下文件上传到FTP服务端然后删除文件
场景 Windows10上怎样开启FTP服务: Windows10上怎样开启FTP服务_BADAO_LIUMANG_QIZHI的博客-CSDN博客 上面在Windows上搭建FTP服务器之后,会接收客 ...
- 利用CUTFTP Tranfer Engine开发.NET FTP客户端
为了解决大文件上传的问题,我曾经也用过XMLHTTP分块,但是感觉还是不够好. 利用FTP的话就会方便服务器文件的管理. 首先安装一个CUTFTP软件,安装好以后,安装的文件夹中会有一个ftpte.e ...
- 使用FTP(IOS FTP客户端开发教程)
本文翻译自新近Wrox出版社出版的,由Peter van de Put所著的<Professional.iOS.Programming>.该书题材比较新颖,结构合理,是一本不错的IOS开发 ...
- 计算机网络ftp客户端实验,计算机网络实验报告FTP客户端.doc
计算机网络实验报告FTP客户端 <计算机网络> 实验报告 班级:IS1202 学号:U201214739 姓名:黎星 华中科技大学计算机学院 二零一四年十一月 目录 实验一:网络组建与实施 ...
- 基于Java实现的一个FTP服务
资源下载地址:https://download.csdn.net/download/sheziqiong/85706472 资源下载地址:https://download.csdn.net/downl ...
- Golang实现一个简单的FTP客户端
使用Golang语言实现的一个简单的FTP客户端:Github源码:Golang实现一个简单的FTP客户端
- 网络编程--ftp客户端的实现(c#版)
.net2.0对ftp有了一个很好的封装,但是确容易让人忽略ftp的真正内部实现,下面是我实现的ftp客户端的功能,其主要步骤是这样的: 1.创建一个FtpWebRequest对象,指向ftp服务器的 ...
- 安装ftp连接linux服务器配置,Linux下FTP安装及配置(VSFTPD服务器安装配置、FTP客户端安装配置)...
安装说明 安装环境:CentOS-6.3 安装方式:yum安装.rpm源码安装 软件:ftp-0.17-51.1.el6.x86_64.rpm 下载地址:http://pan.baidu.com/s/ ...
- 18. 编写FTP客户端程序
在实际应用中可能经常访问FTP服务器来上传或下载文件,Python也可以替我们做这些. [示例 1]下面请看一个例子(ftpclient). 运行的结果如下: FTP客户端程序的编写还可以参照官方文档 ...
- windows ftp服务器_ftp客户端软件,推荐6个流行的FTP客户端软件
无论你是做网站工作,还是运行一个家庭FTP服务器,或者你只是喜欢高速下载,一个稳定且功能齐全的FTP客户端工具都可以节省你大量时间和生命,现在有大量的免费或者收费的FTP客户端软件供大家选择,这里总结 ...
最新文章
- intellij idea 生成可执行jar 运行提示没有主清单属性
- 利用InfoPath实现SharePoint Server 2013列表的级联选择(Cascading Drop Down List)
- datalength,求字符串的字节数
- 安卓学习 之 网络技术(十)
- C#8.0可空引用类型的使用注意要点 1
- vue3 编译很慢_Vue 项目编译时间过长问题
- 2021最新Java高频面试题,很适合大厂面试
- Ubuntu下的QQ-For-Linux 安装
- Pyside2 Qlabel如何快速添加click鼠标单击事件(新手上路,勿喷!)
- 只知道wxid怎么添加好友
- 【雕爷学编程】Arduino动手做(43)---单路继电器模块
- Android调用系统应用打开各种类型文件
- Windows 11和Windows 2022 TLS/SSL(Schannel SSP)的加密套件
- oracle 按旬统计并且每月小计 行转列 PIVOT函数 与分组小计 ROLLUP 函数
- 爬取沪江网考研词汇并按要求存为txt
- Matlab版本对应CUDA
- vue 显示日期只显示年月_vue获取年月日
- 安超云生态 | 安超云与硅格半导体完成产品兼容互认证 携手打造协同生态
- 2021-07-14 串口 、并口、接口划分(UART、RS232、RS422、RS485、TTL、USB)
- 正则化-最通俗的解释