c++网络编程实战——开发基于ftp协议的文件传输模块(二) 配置ftp服务与手动执行ftp命令
配置FTP服务
一.前言
博主的环境是阿里云服务器,操作系统版本为 ubuntu20.04,一下所有操作都基于以上环境下进行的操作,同时为了简化操作我将开放同一个云服务器的不同端口,让它同时充当服务端和客户端,大家如果想测试效果更好且更贴近实际情况的话,建议还是使用一台本地虚拟机+一台云服务器/两台虚拟机/两台云服务器来进行测试来保证测试效果。
二. 安装ftp软件包
- 安装服务端
sudo apt install vsftpd
- 安装客户端
sudo apt install ftp
三.配置ftp服务器
1.前言
在上一篇文章中我们提到过ftp的传输模式有主动/被动传输两种模式,而一般情况下我们默认是被动模式,这里我们的介绍也以被动模式为主。
2.配置ftp服务器开机自启动
systemctl enable vsftpd.service
3.启动ftp服务
systemctl start vsftpd.service
完成上述操作之后我们可以尝试执行下面的命令来查看一下ftp服务监听的端口:
netstat -antup | grep ftp
出现下面即视为成功:

4.为ftp服务创建用户
我们可以执行命令来为ftp服务创建一个用户,比如我们创建一个叫fengxu的用户:
adduser fengxu
如果我们想修改用户的密码:
passwd fengxu
5.创建一个用来供ftp服务使用的文件夹
mkdir /ftp/work
这里我们还创建一个测试文件来为测试使用做准备:
touch /ftp/work/test.txt
6.更改工作文件夹的拥有者
chown -R fengxu:fengxu /ftp/work
7.修改配置文件
大家可以查看一下自己环境下etc目录下的有关的配置文件,我这里是vsftpd.conf

vi vsftpd.conf
#禁止匿名登录FTP服务器。
anonymous_enable=NO
#允许本地用户登录FTP服务器。
local_enable=YES
#监听IPv4 sockets。
listen=YES#在行首添加#注释掉以下参数:
#关闭监听IPv6 sockets。
#listen_ipv6=YES#在配置文件的末尾添加下列参数:
#设置本地用户登录后所在目录。
local_root=/var/ftp/work01
#允许用户上传文件
write_enable=YES
#全部用户被限制在主目录。
chroot_local_user=YES
#启用例外用户名单。
chroot_list_enable=YES
#指定例外用户列表文件,列表中用户不被锁定在主目录。
chroot_list_file=/etc/chroot_list
#开启被动模式。
pasv_enable=YES
allow_writeable_chroot=YES
#本教程中为Linux实例的公网IP。
pasv_address=<FTP服务器公网IP地址>
#设置被动模式下,建立数据传输可使用的端口范围的最小值。
#建议您把端口范围设置在一段比较高的范围内,例如50000~50010,有助于提高访问FTP服务器的安全性。
pasv_min_port=1024
#设置被动模式下,建立数据传输可使用的端口范围的最大值。
pasv_max_port=1048
8.创建chroot_list文件
vi /etc/chroot_list
最后要重启服务
systemctl restart vsftpd.service
9.设置安全组
需要在服务器的安全组里开放20-21端口,还需要开放pasv_min_port和pasv_max_port设置的端口
10.测试
我们尝试在windows下连接ftp服务器:
ftp 云服务器ip地址
出现下面这种情况就表明已经成功了:

常见的ftp命令
1.切换工作目录
查看服务器工作目录
pwd
切换服务器工作目录
cd 目录名
切换本地工作目录
lcd 目录名
2.查看服务器上的目录与文件
列出目录或文件名的详细信息
ls 目录或文件名
dir 目录或文件名
仅列出目录和文件名
nlist 目录或文件名 [本地文件名]
注意:
这个命令式支持通配符的。比如:
nlist /work/*.cpp
我们还可以指定输出位置,比如列出/work目录下的匹配*.cpp的文件名信息,结果输出到本地的/tmp/freecplus.list文件中。
nlist /work/*.cpp /tmp/freecplus.list
3.下载与上传文件
3.1 文件传输的模式
ftp传输文件的模式分二进制和ASCII码两种模式,二进制模式可以传输任何文件,包括压缩包、可执行程序、图片、视频、音频等,而ASCII模式只能传输.txt、.htm等ascii码文件(文本文件)。在实际开发中,不管什么文件,都用二进制方式传输。
- 查看当前的传输模式
type
- 设定传输模式为二进制
bin
- 设定传输模式为ASCII
ascii
3.2 下载文件
3.2.1下载单个文件
get|recv 服务端文件名 [本地文件名]
使用说明:
- 下载文件用get和recv都可以。
- 文件名不允许用“*”、”?”等通配符。
- 服务端文件名和本地文件名可以用绝对路径,如果不写路径,表示当前工作目录。
- 如果本地文件名省略不写,表示把服务端文件下载到本地的当前工作目录,文件名与服务端文件名相同。
3.2.1 下载多个文件
mget 服务端文件1 服务端文件2 服务端文件3 …… 服务端文件n
使用说明:
- 待下载的文件名,可以一一列出来(用空格分隔),也可以用通配符。
- 下载的文件,存放在本地当前工作目录中。
- 下载文件时,会一一提示,如果想关闭提示信息,先输入prompt命令:
prompt
3.3上传文件
3.3.1上传单个文件
put|send 本地文件名 [服务端文件名]
- 上传文件用put和send都可以。
- 文件名不允许用通配符。
- 本地文件名和服务端文件名可以用绝对路径,如果不写路径,表示当前工作目录。
- 如果服务端文件名省略不写,表示把本地文件上传到服务端的当前工作目录,文件名与本地文件名相同。
3.3.2 上传多个文件
mput 本地文件1 本地文件2 本地文件3 …… 本地文件n
使用说明:
- 待上传的文件名,可以一一列出来(用空格分隔),也可以用通配符。
- 上传的文件,存放在服务端当前工作目录中。
- 上传文件时,会一一提示,如果想关闭都显示信息,先输入prompt命令。
prompt
4.其他的ftp命令
- 重命名ftp服务端的文件
rename 旧文件名 新文件名
- 删除ftp服务端上单个文件
delete 文件名
- 删除ftp服务端的多个文件
mdelete 文件名1 文件名2 文件名3 …… 文件名n
- 在ftp服务端上创建目录
mkdir pathname
- 删除ftp服务端上的目录
rmdir pathname
- 切换传输模式
passive
- 显示帮助信息。
help [命令名]
显示ftp命令的帮助信息,如果不输入命令名,则显示全ftp命令的帮助信息。
- 退出ftp。
bye
相关文章:
c++网络编程实战——开发基于ftp协议的文件传输模块(二) 配置ftp服务与手动执行ftp命令
配置FTP服务 一.前言 博主的环境是阿里云服务器,操作系统版本为 ubuntu20.04,一下所有操作都基于以上环境下进行的操作,同时为了简化操作我将开放同一个云服务器的不同端口,让它同时充当服务端和客户端,大家如果想测试效果更好且…...
Sphinx 安装相关指令解释
安装指令 pip3 install sphinx-autobuildpip3 install sphinx_rtd_themepip3 install sphinx_markdown_tablepip3 install sphinx_markdown_tables pip3 install sphinx-autobuild 功能:安装 sphinx-autobuild 包。作用:sphinx-autobuild 是一个工具&am…...
npm下载包-更改默认缓存目录
npm(Node Package Manager)的缓存目录是npm用于存储已下载包的本地位置,以便在后续安装相同包时能够快速复用,从而节省时间和带宽。npm缓存目录的具体位置会根据操作系统的不同而有所差异。 Windows系统 在Windows系统中&#x…...
PWM再理解(1)
前言 昨天过于劳累,十点睡觉,本来想梳理一下PWM,今天补上。 PWM内涵 PWM全称:Pulse Width Modulation,也就是脉宽调制的意思,字面意思理解就是对脉冲的宽度进行改变。准确就是通过数字输出对模拟电路进行…...
CSPVD 智慧工地安全帽安全背心检测开发包
CSPVD SDK适用于为各种智慧工地应用增加安全防护穿戴合规的检测能力,能够有效检测未戴安全帽和未穿 安全背心的人员,提供Web API和原生API。官方下载:CSPVD工地安全防护检测 1、目录组织 CSPVD开发包的目录组织说明如下: xlpr_…...
给常用Docker命令起别名,提高效率
在日常的开发和运维工作中,Docker是一款非常常用的工具。为了提高工作效率,我们可以为一些常用的Docker命令设置别名,这样可以更快速地执行这些命令。以下是如何给常用Docker命令起别名的详细步骤。 修改/root/.bashrc文件 首先,…...
基于深度学习的草莓成熟度实时检测系统(UI界面+YOLOv8/v7/v6/v5模型+完整代码与数据集)
1. 引言 在农业领域,草莓的成熟度检测是保证果实品质的重要环节。传统的方法依赖于人工经验,不仅耗时费力,还容易出错。本文介绍如何使用YOLO(You Only Look Once)系列模型(YOLOv8/v7/v6/v5)构…...
【devops】ttyd 一个web版本的shell工具 | web版本shell工具 | web shell
一、什么是 TTYD ttyd是在web端一个简单的服务器命令行工具 类似我们在云厂商上直接ssh链接我们的服务器输入指令一样 二、安装ttyd 1、macOS Install with Homebrew: brew install ttydInstall with MacPorts: sudo port install ttyd 2、linux Binary version (recommend…...
Windows环境Apache配置解析PHP,以及配置虚拟主机详解
1. 安装 Apache 和 PHP 确保你已经安装了 Apache Web 服务器和 PHP。你可以从官方网站下载它们的 Windows 版本: Apache HTTP ServerPHP 2. 配置 Apache 配置 httpd.conf 文件 找到你的 Apache 安装目录下的 conf 文件夹中的 httpd.conf 文件,使用文…...
Redis高级篇—分布式缓存
目录 Redis持久化 RDB持久化 AOF持久化 RDB与AOF对比 Redis主从 全量同步 增量同步 Redis哨兵 RedisTemplate集成哨兵实现 Redis分片集群 散列插槽 集群伸缩 故障转移 自动故障转移 手动故障转移 RedisTemplate访问分片集群 Redis持久化 RDB持久化 RDB全称Re…...
c++端的类,作为组件在qml端使用
qml使用c端的类,作为组件在qml端使用 这个类必须继承QObject 这个类必须继承QObject #ifndef COLLISIONALARM_H #define COLLISIONALARM_H#include <QObject>class CollisionAlarm : public QObject {Q_OBJECT//这个宏就叫做反射机制,让qml端直接…...
Android 14 适配之 - 全屏 intent 通知
全屏 intent 通知 在 Android 11(API 级别 30)中,任何应用都可以在手机处于锁定状态时使用 Notification.Builder.setFullScreenIntent 发送全屏 intent。在 AndroidManifest 中声明 USE_FULL_SCREEN_INTENT 权限即可; 全屏 int…...
如何在 Vue 和 JavaScript 中截取视频任意帧图片
大家好!今天我们来聊聊如何在 Vue 和 JavaScript 中截取视频的任意一帧图片。这个功能在很多场景下都非常有用,比如视频编辑、视频预览等。本文将带你一步步实现这个功能,并且会提供详细的代码示例。 准备工作 首先,我们需要一个…...
代码随想录学习 day54 图论 Bellman_ford 队列优化算法(又名SPFA) 学习
Bellman_ford 队列优化算法(又名SPFA) 卡码网:94. 城市间货物运输 I 题目描述 某国为促进城市间经济交流,决定对货物运输提供补贴。共有 n 个编号为 1 到 n 的城市,通过道路网络连接,网络中的道路仅允许从…...
递归遍历树结构,前端传入一整颗树,后端处理这个树,包括生成树的id和pid等信息,
递归逻辑 递归遍历树结构,将树结构转换list集合 并添加到 flowStepTree 集合 // 递归遍历树结构,将树结构转换list集合 并添加到 flowStepTree 集合private static void settingTree(ProductFlowStepVO node, Long parentId, String ancestors, List<…...
Nginx详解(超级详细)
目录 Nginx简介 1. 为什么使用Nginx 2. 安装Nginx Nginx的核心功能 1. Nginx反向代理功能 2. Nginx的负载均衡 3 Nginx动静分离 Nginx简介 Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协…...
postman使用旧版本报错version mismatch detected
卸载 postman又重装了别的版本,打开后遇到了这个报错,解决办法如下: 删除缓存文件 C:\Users\Administrator\AppData\Roaming\Postman 下载PostMan 提取码:6k51...
探索数据的隐藏维度:使用Scikit-Learn进行特征交互性预测
探索数据的隐藏维度:使用Scikit-Learn进行特征交互性预测 在机器学习中,特征交互性是指不同特征之间可能存在的复杂关系,这些关系对预测结果有着重要影响。Scikit-Learn(简称sklearn),作为Python中广受欢迎…...
首个WebAgent在线评测框架和流程数据管理平台来了,GPT-4、Qwen登顶闭源和开源榜首!
在当今科技迅速发展的时代,大型语言模型(Large Language Model,LLM)正以前所未有的速度改变着我们与数字世界的互动方式。基于LLM的智能代理(LLM Agent),从简单的信息搜索到复杂的网页操作&…...
UE TSharedPtr
文章目录 概述TSharedPtrTSharedPtr包含2部分 构造,析构,拷贝构造,移动构造构造拷贝构造移动构造 小结 概述 之前写过一篇c的智能指针的,这篇写下ue的。本质上来说是差不多的,可以简单看看。 TSharedPtr 如下图&…...
WARPED框架:单目RGB驱动的机器人视觉运动策略学习
1. WARPED框架:单目RGB驱动的机器人视觉运动策略学习新范式在机器人模仿学习领域,如何高效获取高质量的示范数据一直是个核心挑战。传统方法通常需要昂贵的多视角相机阵列、深度传感器或专用硬件设备,这不仅增加了部署成本,更限制…...
AI应用配置管理实战:从环境变量到多租户架构的工程化解决方案
1. 项目概述:AI配置管理的“瑞士军刀”最近在折腾AI应用开发,特别是那些需要调用不同模型、处理复杂提示词的项目时,配置管理简直是个噩梦。每个模型API的密钥格式不一样,提示词模板散落在各个脚本里,环境变量多得记不…...
面试记录 (2026/5/12)
问题一:java并发包下的AQS,了解多少? 这个真是没看过源码,就不班门弄斧了 直接学习下 大佬的经验 https://blog.csdn.net/qq_45772447/article/details/149126295?fromshareblogdetail&sharetypeblogdetail&sharerId149126295&…...
别再手动点选了!用C#写个SolidWorks插件,一键智能识别并拉伸草图里的特定轮廓
用C#开发SolidWorks智能插件:一键识别并拉伸特定草图轮廓的工程实践 在机械设计领域,SolidWorks作为主流三维CAD软件,其草图绘制与特征创建是产品开发的基础环节。工程师们经常遇到这样的场景:复杂草图中包含多个相交轮廓…...
AI产品技能库实战:将专家经验注入Claude Code,打造你的虚拟产品专家
1. 项目概述:当AI助手遇上产品经理的“武林秘籍”如果你是一名产品经理、创业者,或者任何需要与产品打交道的人,最近可能已经感受到了AI助手带来的效率革命。无论是用Claude、ChatGPT还是其他工具来辅助写文档、分析数据,它们都像…...
clawdocker:基于Shell脚本的Docker实例管理器,简化OpenClaw多实例部署
1. 项目概述与核心价值 如果你正在折腾OpenClaw,或者任何需要部署多个独立实例的Docker化应用,那么你大概率经历过这样的场景:每次新建一个实例,都要手动执行一长串的 docker run 命令,记住各种端口映射、卷挂载和环…...
React Native Expo样板项目:集成导航、状态管理与样式的最佳实践
1. 项目概述:一个为React Native开发者准备的“开箱即用”脚手架 如果你是一名React Native开发者,或者正打算踏入这个领域,那么你一定对项目启动初期那些繁琐的配置工作深有体会。从搭建开发环境、配置路由、集成状态管理,到设置…...
如何高效配置ClickHouse连接器:专业用户的完整指南
如何高效配置ClickHouse连接器:专业用户的完整指南 【免费下载链接】clickhouse-odbc ODBC driver for ClickHouse 项目地址: https://gitcode.com/gh_mirrors/cl/clickhouse-odbc ClickHouse ODBC驱动是连接ClickHouse数据库与各类数据分析工具的关键桥梁&a…...
RustClaw:高性能网络代理的Rust实现与架构解析
1. 项目概述:一个Rust实现的Claw库最近在折腾一些网络代理和流量处理的工具链,发现很多核心组件对性能和安全性的要求越来越高。传统的C/C实现虽然快,但内存安全和并发模型上的坑,让开发和维护成本居高不下。就在这个当口…...
Chartist图表库终极指南:如何构建响应式数据可视化应用
Chartist图表库终极指南:如何构建响应式数据可视化应用 【免费下载链接】chartist Simple responsive charts 项目地址: https://gitcode.com/gh_mirrors/ch/chartist Chartist是一款轻量级且功能强大的响应式图表库,专为现代Web应用设计。它能够…...
