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(主动模式)简单应用参考的更多相关文章

  1. 转!!ftp的主动模式(port)与被动模式(PASV)

    转自 http://www.phpweblog.net/killjin/archive/2008/01/06/2653.html   ftp中主动模式(port)与被动模式(PASV) 目录 开场白 ...

  2. FTP的主动模式和被动模式

    摘自http://blog.csdn.net/love_gaohz/article/details/50723164 http://my.oschina.net/binny/blog/17469 FT ...

  3. ftp的主动模式active mode和被动模式 passive mode的配置和区别

    ftp的主动模式active mode和被动模式 passive mode的配置和区别 2017年05月08日 17:47:16 阅读数:21768 本文主要记录的是在linux上的区别,弄了一整天才 ...

  4. FTP之主动模式vs被动模式

    背景说明 最近有个项目涉及到FTP的上传下载问题.在本地开发好的程序测试的时候能正常获取FTP内容,但一放到生产上却显示connection timeout,无法连接.经过一些研究,发现是防火墙造成的 ...

  5. ftp的主动模式和被动模式的配置和区别

    原文链接: https://www.cnblogs.com/lnlvinso/p/8947369.html ftp模式分为主动模式(active mode)和被动模式(passive mode),ft ...

  6. Linux FTP的主动模式与被动模式

    Linux FTP的主动模式与被动模式 一.FTP主被动模式        FTP是文件传输协议的简称,ftp传输协议有着众多的优点所以传输文件时使用ftp协议的软件很多,ftp协议使用的端口是21( ...

  7. FTP的主动模式与被动模式

    FTP服务器使用20和21两个网络端口与FTP客户端进行通信. FTP服务器的21端口用于传输FTP的控制命令,20端口用于传输文件数据. FTP主动模式: FTP客户端向服务器的FTP控制端口(默认 ...

  8. FTP基础知识 FTP port(主动模式) pasv(被动模式) 及如何映射FTP

    您是否正准备搭建自己的FTP网站?您知道FTP协议的工作机制吗?您知道什么是PORT方式?什么是PASV方式吗?如果您不知道,或没有完全掌握,请您坐下来,花一点点时间,细心读完这篇文章.所谓磨刀不误砍 ...

  9. ftp的主动模式(port)与被动模式(PASV) (转)

    FTP是仅基于TCP的服务,不支持UDP.与众不同的是FTP使用2个端口,一个数据端口和一个命令端口(也可叫做控制端口).通常来说这两个端口是21(命令端口)和20(数据端口).但FTP工作方式的不同 ...

  10. 【ftp】主动模式和被动模式

    来自:http://blog.csdn.net/liuhelong12/article/details/50218311 原博主不让转载全文,不过下面这部分是原博主转载别人的,所以我拿过来应该没问题吧 ...

随机推荐

  1. 压测模式该怎么选?RunnerGo五大压测模式详解

    在做性能测试时需要根据性能需求配置不同的压测模式,如:阶梯模式.使用jmeter时我们需要安装插件来配置测试模式,RunnerGo内嵌了压测模式这一选项更方便使用,今天来看看RunnerGo的几种压测 ...

  2. go语言中的数据类型

    数据类型可分为四类 基础类型 数字.字符串和布尔型 复合类型 数组.结构体 引用类型 指针.切片.map.函数.通道channel 接口类型 interface

  3. Oracle设置日志参数-ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;

    要实现两个数据库之间的实时同步,需要给Oracle设置参数 ALTER DATABASE ADD SUPPLEMENTAL LOG DATA; -- 执行了12小时,等待数据库中的其它事务都提交以后才 ...

  4. 【LeetCode哈希表#5】四数相加II(map)

    四数相加II 力扣题目链接(opens new window) 给定四个包含整数的数组列表 A , B , C , D ,计算有多少个元组 (i, j, k, l) ,使得 A[i] + B[j] + ...

  5. 如何优化好UITableView,值得思考

    如果你觉得 UITableViewDelegate 和 UITableViewDataSource 这两个协议中有大量方法每次都是复制粘贴,实现起来大同小异:如果你觉得发起网络请求并解析数据需要一大段 ...

  6. Android内存优化—内存优化总结

    内存优化总结 内存问题 内存抖动:导致GC导致卡顿 内存泄漏:导致频繁GC,可用内存减少 内存溢出:导致OOM 工具排查 AS中的Profiler查看内存情况,是否锯齿状,是否持续上升 MAT排查 L ...

  7. 【Azure Service Bus】使用Spring Cloud integration示例代码,为多个 Service Bus的连接使用 ConnectionString 方式

    问题描述 查看Service Bus的Java示例代码,发现使用Spring Cloud Integration,配置 Application.yaml 可以连接到两个Service Bus. 但代码 ...

  8. supervisor的使用与配置说明

    Supervisor 是用 Python 开发的一套通用的 进程管理程序 ,能将一个普通的命令行进程变为后台daemon,并监控进程状态,异常退出时能自动重启. 一. 安装 1.1 安装 # 根目录下 ...

  9. SHA算法:数据完整性的守护者

    一.SHA算法的起源与演进 SHA(Secure Hash Algorithm)算法是一种哈希算法,最初由美国国家安全局(NSA)设计并由国家标准技术研究所(NIST)发布.SHA算法的目的是生成数据 ...

  10. AutoNumber VsCode插件开发

    AutoNumber VsCode插件开发 ::: details 目录 目录 AutoNumber VsCode插件开发 Step. 2: 安装脚手架 Step. 3: 创建空项目 Step. 4: ...