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 原博主不让转载全文,不过下面这部分是原博主转载别人的,所以我拿过来应该没问题吧 ...
随机推荐
- 压测模式该怎么选?RunnerGo五大压测模式详解
在做性能测试时需要根据性能需求配置不同的压测模式,如:阶梯模式.使用jmeter时我们需要安装插件来配置测试模式,RunnerGo内嵌了压测模式这一选项更方便使用,今天来看看RunnerGo的几种压测 ...
- go语言中的数据类型
数据类型可分为四类 基础类型 数字.字符串和布尔型 复合类型 数组.结构体 引用类型 指针.切片.map.函数.通道channel 接口类型 interface
- Oracle设置日志参数-ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;
要实现两个数据库之间的实时同步,需要给Oracle设置参数 ALTER DATABASE ADD SUPPLEMENTAL LOG DATA; -- 执行了12小时,等待数据库中的其它事务都提交以后才 ...
- 【LeetCode哈希表#5】四数相加II(map)
四数相加II 力扣题目链接(opens new window) 给定四个包含整数的数组列表 A , B , C , D ,计算有多少个元组 (i, j, k, l) ,使得 A[i] + B[j] + ...
- 如何优化好UITableView,值得思考
如果你觉得 UITableViewDelegate 和 UITableViewDataSource 这两个协议中有大量方法每次都是复制粘贴,实现起来大同小异:如果你觉得发起网络请求并解析数据需要一大段 ...
- Android内存优化—内存优化总结
内存优化总结 内存问题 内存抖动:导致GC导致卡顿 内存泄漏:导致频繁GC,可用内存减少 内存溢出:导致OOM 工具排查 AS中的Profiler查看内存情况,是否锯齿状,是否持续上升 MAT排查 L ...
- 【Azure Service Bus】使用Spring Cloud integration示例代码,为多个 Service Bus的连接使用 ConnectionString 方式
问题描述 查看Service Bus的Java示例代码,发现使用Spring Cloud Integration,配置 Application.yaml 可以连接到两个Service Bus. 但代码 ...
- supervisor的使用与配置说明
Supervisor 是用 Python 开发的一套通用的 进程管理程序 ,能将一个普通的命令行进程变为后台daemon,并监控进程状态,异常退出时能自动重启. 一. 安装 1.1 安装 # 根目录下 ...
- SHA算法:数据完整性的守护者
一.SHA算法的起源与演进 SHA(Secure Hash Algorithm)算法是一种哈希算法,最初由美国国家安全局(NSA)设计并由国家标准技术研究所(NIST)发布.SHA算法的目的是生成数据 ...
- AutoNumber VsCode插件开发
AutoNumber VsCode插件开发 ::: details 目录 目录 AutoNumber VsCode插件开发 Step. 2: 安装脚手架 Step. 3: 创建空项目 Step. 4: ...