CH395的FTP Server(主动模式)简单应用参考
FTP(File Transfer Protocol,文件传输协议) 是 TCP/IP 协议组中的协议之一。FTP协议包括两个组成部分,其一为FTP服务器,其二为FTP客户端。本篇文章将基于FTP协议实现CH395作FTP服务器,采用Filezilla - Client软件建立客户端连接CH395服务器进行文件的上传和下载。
FTP Server为主动模式时,FTP客户端连接FTP服务器的21端口,发送相应的用户名和密码进行连接登录,用户名和密码验证成功后,通过list命令进行目录读取相关列表和数据,之后客户端发送PORT命令
FTP客户端连接到FTP服务器的21端口,发送用户名和密码登录,登录成功后要list列表或者读取数据时,客户端随机开放一个端口(1024以上),发送 PORT命令到FTP服务器,告诉服务器客户端采用主动模式并开放端口;FTP服务器收到PORT主动模式命令和端口号后,通过服务器的20端口和客户端开放的端口连接,发送数据。
本文测试环境为CH32V307RCT6+CH395Q+FIlezilla clinet进行验证。
CH395驱动和FTP驱动参数移植WCH官网EVT中的EXAM(文章结尾附代码),如下图1示:

图一
移植完成后,注意本地IP及用户名和密码如图2示,在该段程序中,设置了需要正确用户名和密码才能正常访问服务器。
void CH395_FTPCmdRespond( char *recv_buff )
{
UINT8 s;
UINT8 len;
UINT16 port; if( strncmp("USER", recv_buff, 4) == 0 ){ /* 用户名 */
memset((void *)UserName,'\0',sizeof(UserName));
CH395_FTPGetFileName( recv_buff,UserName );
CH395_FTPSendData( (char *)FTP_SERVICE_CMD[2],strlen(FTP_SERVICE_CMD[2]),ftp.SocketCtl );
}
else if( strncmp("PASS", recv_buff, 4) == 0 ){ /* 密码 */
#if Access_Authflag /* 如果需要检测用户名*/
if(strncmp(pUserName, UserName, strlen(pUserName)) == 0){ /* 用户名正确 */
CH395_FTPSendData( (char *)FTP_SERVICE_CMD[3],strlen(FTP_SERVICE_CMD[3]),ftp.SocketCtl );
}
else{ /* 用户名错误*/
CH395_FTPSendData( (char *)FTP_SERVICE_CMD[4],strlen(FTP_SERVICE_CMD[4]),ftp.SocketCtl );
}
#else
CH395_FTPSendData( (char *)FTP_SERVICE_CMD[3],strlen(FTP_SERVICE_CMD[3]),ftp.SocketCtl );
#endif
memset((void *)UserName,'\0',sizeof(UserName));
CH395_FTPGetFileName( recv_buff,UserName );
if(strncmp(pPassWord, UserName, strlen(pPassWord)) == 0){ /* 验证密码是否正确(符合条件则有写文件权限)*/
ftp.AuthFlag = 1;
printf("have more authority\n");
}
}

图二
-----------------------------------------------------------------------------------------------------------------------------------------------------
验证测试:打开Filezilla clinet软件进行配置,如图三,注意主机的IP和用户名密码,端口填21(可不填)。

图三
更改传输设置,将模式修改成主动模式,如图四显示:

图四
--------------------------------------------------------------------------------------------------------------
设置完成后,将CH395进行复位及初始化,初始化完成后,点击Filezilla软件上的连接,正常连接服务器后,会弹出目录及预存在MCU中文件A、B,图五示:

图五
右击右边文件中的A、B任意文件后点击下载,如图六示,如果正常,则显示数据传输完成。

图六
Filezilla软件可自行搜索下载(开源)。相关测试代码:https://files.cnblogs.com/files/blogs/805237/CH395FTP.rar?t=1712050453&download=true
CH395的FTP Server(主动模式)简单应用参考的更多相关文章
- 转!!ftp的主动模式(port)与被动模式(PASV)
转自 http://www.phpweblog.net/killjin/archive/2008/01/06/2653.html ftp中主动模式(port)与被动模式(PASV) 目录 开场白 ...
- FTP的主动模式和被动模式
摘自http://blog.csdn.net/love_gaohz/article/details/50723164 http://my.oschina.net/binny/blog/17469 FT ...
- ftp的主动模式active mode和被动模式 passive mode的配置和区别
ftp的主动模式active mode和被动模式 passive mode的配置和区别 2017年05月08日 17:47:16 阅读数:21768 本文主要记录的是在linux上的区别,弄了一整天才 ...
- FTP之主动模式vs被动模式
背景说明 最近有个项目涉及到FTP的上传下载问题.在本地开发好的程序测试的时候能正常获取FTP内容,但一放到生产上却显示connection timeout,无法连接.经过一些研究,发现是防火墙造成的 ...
- ftp的主动模式和被动模式的配置和区别
原文链接: https://www.cnblogs.com/lnlvinso/p/8947369.html ftp模式分为主动模式(active mode)和被动模式(passive mode),ft ...
- Linux FTP的主动模式与被动模式
Linux FTP的主动模式与被动模式 一.FTP主被动模式 FTP是文件传输协议的简称,ftp传输协议有着众多的优点所以传输文件时使用ftp协议的软件很多,ftp协议使用的端口是21( ...
- FTP的主动模式与被动模式
FTP服务器使用20和21两个网络端口与FTP客户端进行通信. FTP服务器的21端口用于传输FTP的控制命令,20端口用于传输文件数据. FTP主动模式: FTP客户端向服务器的FTP控制端口(默认 ...
- FTP基础知识 FTP port(主动模式) pasv(被动模式) 及如何映射FTP
您是否正准备搭建自己的FTP网站?您知道FTP协议的工作机制吗?您知道什么是PORT方式?什么是PASV方式吗?如果您不知道,或没有完全掌握,请您坐下来,花一点点时间,细心读完这篇文章.所谓磨刀不误砍 ...
- ftp的主动模式(port)与被动模式(PASV) (转)
FTP是仅基于TCP的服务,不支持UDP.与众不同的是FTP使用2个端口,一个数据端口和一个命令端口(也可叫做控制端口).通常来说这两个端口是21(命令端口)和20(数据端口).但FTP工作方式的不同 ...
- 【ftp】主动模式和被动模式
来自:http://blog.csdn.net/liuhelong12/article/details/50218311 原博主不让转载全文,不过下面这部分是原博主转载别人的,所以我拿过来应该没问题吧 ...
随机推荐
- 【Android 逆向】【攻防世界】easy-dex
这一题不easy,不知为何叫这个名字.... 1. apk 安装到手机,不知所云,各种亮瞎眼闪光 2. jadx 打开apk,一行java代码都没有,打开AndroidManifest看看 <? ...
- windows下的批处理bat文件和Linux下的shell文件的含义
原文:https://www.cnblogs.com/caiguodong/p/10308255.html shell(Linux.Solaris) bat(windows) 含义 # rem 注释行 ...
- 【Azure Developer】Java代码访问Key Vault Secret时候的认证问题,使用 DefaultAzureCredentialBuilder 或者 ClientSecretCredentialBuilder
问题描述 使用Java SDK获取Key Vault Secret机密信息时,需要获取授权.通常是使用AAD的注册应用(Client ID, Tenant ID, Client Secret)来获取 ...
- 苏宁基于 AI 和图技术的智能监控体系的建设
汤泳,苏宁科技集团智能监控与运维产研中心总监,中国商业联合会智库顾问,致力于海量数据分析.基于深度学习的时间序列分析与预测.自然语言处理和图神经网络的研究.在应用实践中,通过基于 AI 的方式不断完善 ...
- Docker的使用记录
开始 这是第一个尝试在Leanote上面编写文章,我觉得最重要的事情就是能够保证md文件是能够移植的,否则如果这个软件不靠谱的话,我还能把文章移动到别的地方去.所以先写一篇文章看看效果如何,方便不方便 ...
- uniapp+定时云函数保活replit
在replit中运行起来后,如果没有请求,则会在5分钟后关机,所以需要一个进程来定时访问一下,以达到保活的目的.replit是什么?我的理解是:它是一个在线的IDE,前端项目可以直接跑起来,且repl ...
- Java //遍历100以内的偶数,获取所有偶数的和,输出偶数的个数
1 //遍历100以内的偶数,获取所有偶数的和,输出偶数的个数 2 3 int i =1; 4 int sum = 0; 5 int count = 0; 6 for(i = 1;i<=100; ...
- PetriCrode ---Code Genreation for Colored Petri Nets Annotated with Pragmatics
1. PetriCode lets users generate code from CPN models annotated with pragmatics ,PetriCode allows t ...
- TimeLine 时间轴 网站 分享 time.graphics - nodejs 10年图
话说20年 弹指一挥间 https://time.graphics/line/682014 nodejs 10年图 https://time.graphics/line/598790 资料 2022, ...
- Mysql导出导入操作
安装mysql客户端 # 在终端上下载mysql源 wget https://dev.mysql.com/get/mysql80-community-release-el7-7.noarch.rpm ...