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. Windows开发环境如何启用Directory.Build.props版本号集中管理

    每个产品一个根目录 Directory.Build.props的工作模式和NuGet.Config不同,Directory.Build.props不能继承.当dotnet restore工作的时候,会 ...

  2. 在Avalonia项目中使用MediatR和MS.DI库实现事件驱动通信

    大家好,我是沙漠尽头的狼! AvaloniaUI是一个强大的跨平台.NET客户端开发框架,让开发者能够针对Windows.Linux.macOS.Android和iOS等多个平台构建应用程序.在构建复 ...

  3. 16. Class字节码结构

    1. 相关概念 1.1字节码文件的跨平台性 Java 语言是跨平台的(write once, run anywhere) 当 Java 源代码成功编译成字节码后,如果想在不同的平台上面运行, 则无须再 ...

  4. VMware workstation虚拟机联网的方法

    注意:我的虚拟机所安装的系统是Centos 方法一: 第一步:先设置VMware的编辑--虚拟网络编辑器,启用VMnet8,NAT模式,如下图所示. 其实就是VMware默认的设置,无须更改,如果不小 ...

  5. 基于STM32F407MAC与DP83848实现以太网通讯三(STM32F407MAC配置以及数据收发)

    本章实现了基于STM32F407MAC的数据收发功能,通过开发板的RJ45接口连接网线到电脑,电脑使用Wiershark工具抓包验证,工程源码.资料和软件见文末. 参考文档: DP83848IV英文 ...

  6. Rtsp转Flv在浏览器中播放

    目录 概述 环境 项目目录清单 项目搭建步骤 引入相关npm依赖 实例化一个express应用 创建WebsocketServer并解析rtsp 使用flv播放 浏览器中测试 代码 引用 概述 众所周 ...

  7. iview Button按钮 全局click事件vue拦截 节流 - 防抖 Throttle debounce

    这里是按钮的节流,就没用防抖 const setVueClickGlobalThrottle = Vue => { // 节流 const on = Vue.prototype.$on Vue. ...

  8. STM32进入HardFault_Handler的调试方法

    在编写STM32程序代码时由于自己的粗心会发现有时候程序跑着跑着就进入了 HardFault_Handler中断,按照经验来说进入HardFault_Handler故障的原因主要有两个方面: 1:内存 ...

  9. Spring Boot 2.0 新人会踩的坑--启动报404错误

    转载自:http://www.javaman.cn/channels/sb2 启动程序,验证效果 根据图示,点击按钮,来启动 Spring Boot Web 程序, 查看控制台输出: . ____ _ ...

  10. jenkins安装和基本使用

    参考:https://zhuanlan.zhihu.com/p/56037782(安装) https://gitee.com/oschina/Gitee-Jenkins-Plugin/(使用) htt ...