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

 

 

 

 

 

  

 

   

posted on 2024-04-02 17:35  sw2222  阅读(25)  评论(0编辑  收藏  举报