> 文章列表 > 合宙Air780E|FTP|内网穿透|命令测试|LuatOS-SOC接口|官方demo|学习(18):FTP命令及应用

合宙Air780E|FTP|内网穿透|命令测试|LuatOS-SOC接口|官方demo|学习(18):FTP命令及应用

合宙Air780E|FTP|内网穿透|命令测试|LuatOS-SOC接口|官方demo|学习(18):FTP命令及应用

1、FTP服务器准备

本机为win11系统,利用IIS搭建FTP服务器。

搭建方式可参考博文:windows系统搭建FTP服务器教程

windows系统搭建FTP服务器教程_程序员路遥的博客-CSDN博客_windows服务器安装ftp

设置完成后,测试FTP(已正常访问,测试ls列出服务器上的文件):

外网IP映射至本地FTP服务器(采用小米球做内网端口映射)。

 可参考

  1. 小米球官网:Ngrok国内免费服务器-小米球ngrok
  2. 博文:小米球外网映射本地tomcat

小米球外网映射本地tomcat_lanren312的博客-CSDN博客

2、FTP Demo main.c代码及解析:

                print(ftp.login(nil,"ngrok2.xiaomiqiu123.top",*****,"m***********n","***********").wait())print(ftp.command("NOOP").wait()) --此命令不产生什么实际动作,它仅使服务器返回OK。print(ftp.command("SYST").wait()) --FTP提供SYST和STAT命令。其中,SYST命令用来获取服务器的操作系统,--STAT用于获取当前程序和目录信息。这两个命令的信息默认不显示。--NMAP的ftp-syst脚本通过向FTP服务器发送这两个命令,并解析返回信息,而获取相关信息,如操作系统类型、FTP配置信息等。print(ftp.command("TYPE I").wait())  --设置编码类型为Iprint(ftp.command("PWD").wait()) --返回指定 FTP 连接的当前目录名称print(ftp.command("MKD QWER").wait()) --创建路径 QWERprint(ftp.command("CWD /QWER").wait()) --改变工作目录,即改变当前所在位置至/QWER(服务器分配的文件夹路径)print(ftp.command("CDUP").wait()) --把当前目录改变为 FTP 服务器上的父目录print(ftp.command("RMD /QWER").wait()) --删除路径 QWER(QWER为空状态)sys.wait(1000)--錯誤提示:net_lwip_tcp_err_cb 637:adapter 1 socket 3 not closing, but error -13 待报issue;--print(ftp.command("LIST").wait()) --目录列表工具,能够列出FTP、本地磁盘上的目录内容,输出格式可以是树型图,也可以是URL、HTML、带格式文本文件等形式--提示false,pull不成功,原因待查!print(ftp.pull("/1222.txt","/1222.txt").wait()) --FTP文件下载(服务器中必须先有1222.txt)local f = io.open("/1222.txt", "r")if f thenlocal data = f:read("*a")f:close()log.info("fs", "writed data", data)elselog.info("fs", "open file for read failed")endprint(ftp.command("DELE /12222.txt").wait()) --删除服务器上的文件print(ftp.push("/1222.txt","/12222.txt").wait()) --上传文件1222-1.txt至服务器根目录,改名为12222.txtprint(ftp.close().wait()) --关闭FTP服务器log.info("meminfo", rtos.meminfo("sys"))  --显示内存情况

log文件:

[2023-02-23 22:23:02.699] DBG: ap log port COM13打开成功[2023-02-23 22:23:02.724] DBG: soc log port COM11打开成功[2023-02-23 22:23:02.863][000000000.229] I/pm pm mode 1[2023-02-23 22:23:02.866][000000000.230] I/pm poweron: Power/Reset[2023-02-23 22:23:02.869][000000000.230] I/main LuatOS@EC618 base 22.12 bsp V1103 32bit[2023-02-23 22:23:02.873][000000000.230] I/main ROM Build: Feb  3 2023 14:22:10[2023-02-23 22:23:02.878][000000000.239] D/main loadlibs luavm 204792 14152 14152[2023-02-23 22:23:02.884][000000000.239] D/main loadlibs sys   300416 52896 53088[2023-02-23 22:23:02.889][000000000.448] self_info 113:model Air780E imei 861551056******[2023-02-23 22:23:03.249][000000000.917] D/mobile CSCON 1[2023-02-23 22:23:04.290][000000001.943] D/mobile NETIF_LINK_ON -> IP_READY[2023-02-23 22:23:04.292][000000001.947] D/DNS ngrok2.xiaomiqiu123.top state 0 id 1 ipv6 0 use dns server2, try 0[2023-02-23 22:23:04.328][000000001.984] I/DNS dns all done ,now stop[2023-02-23 22:23:04.721][000000002.376] true[2023-02-23 22:23:04.814][000000002.484] 200 NOOP command successful.[2023-02-23 22:23:04.925][000000002.586] 215 Windows_NT[2023-02-23 22:23:05.036][000000002.704] 200 Type set to I.[2023-02-23 22:23:05.177][000000002.837] 257 "/" is current directory.[2023-02-23 22:23:05.288][000000002.944] 257 "QWER" directory created.[2023-02-23 22:23:05.400][000000003.054] 250 CWD command successful.[2023-02-23 22:23:05.494][000000003.160] 250 CDUP command successful.[2023-02-23 22:23:05.602][000000003.268] 250 RMD command successful.[2023-02-23 22:23:12.871][000000010.528] net_lwip_tcp_err_cb 637:adapter 1 socket 1 not closing, but error -13[2023-02-23 22:23:23.382][000000021.042] D/mobile CSCON 0[2023-02-23 22:23:28.772][000000026.436] D/mobile CSCON 1[2023-02-23 22:23:39.035][000000036.693] D/mobile CSCON 0[2023-02-23 22:23:42.982][000000040.636] false[2023-02-23 22:23:42.986][000000040.642] I/user.fs    writed data     [2023-02-23 22:23:43.027][000000040.695] D/mobile CSCON 1[2023-02-23 22:23:43.886][000000041.552] 550-Data channel timed out.Win32 error:   The network connection was aborted by the local system.Error details: Data channel timed out.550 End550-The system cannot find the file specified.Win32 error:   The system cannot find the file specified.Error details: File system returned an error.550 End[2023-02-23 22:23:43.995][000000041.662] E/ftp data_netc already create[2023-02-23 22:23:43.999][000000041.664] false[2023-02-23 22:23:44.104][000000041.769] 221 Goodbye.[2023-02-23 22:23:44.106][000000041.770] I/user.meminfo        300416    59128      63812

PS:ftp - ftp 客户端函数说明

ftp.login(adapter,ip_addr,port,username,password)

FTP客户端

参数

传入值类型

解释

int

适配器序号, 只能是socket.ETH0, socket.STA, socket.AP,如果不填,会选择平台自带的方式,然后是最后一个注册的适配器

string

ip_addr 地址

string

port 端口,默认21

string

username 用户名

string

password 密码

bool/table

是否为ssl加密连接,默认不加密,true为无证书最简单的加密,table为有证书的加密
server_cert 服务器ca证书数据
client_cert 客户端ca证书数据
client_key 客户端私钥加密数据
client_password 客户端私钥口令数据

返回值

返回值类型

解释

bool/string

成功返回true 失败返回string

例子

ftp_login = ftp.login(nil,"xxx")


ftp.command(cmd)

FTP命令

参数

传入值类型

解释

string

cmd 命令 目前支持:NOOP SYST TYPE PWD MKD CWD CDUP RMD DELE LIST

返回值

返回值类型

解释

string

成功返回true 失败返回string

例子

    print(ftp.command("NOOP").wait())

    print(ftp.command("SYST").wait())

    print(ftp.command("TYPE I").wait())

    print(ftp.command("PWD").wait())

    print(ftp.command("MKD QWER").wait())

    print(ftp.command("CWD /QWER").wait())

    print(ftp.command("CDUP").wait())

    print(ftp.command("RMD QWER").wait())

   print(ftp.command("DELE /1/12222.txt").wait())


ftp.pull(local_name,remote_name)

FTP文件下载

参数

传入值类型

解释

string

local_name 本地文件

string

remote_name 服务器文件

返回值

返回值类型

解释

bool/string

成功返回true 失败返回string

例子

ftp.pull("/1222.txt","/1222.txt").wait()


ftp.push(local_name,remote_name)

FTP文件上传

参数

传入值类型

解释

string

local_name 本地文件

string

remote_name 服务器文件

返回值

返回值类型

解释

bool/string

成功返回true 失败返回string

例子

ftp.push("/1222.txt","/1222.txt").wait()


ftp.close()

FTP客户端关闭

参数

返回值

返回值类型

解释

bool/string

成功返回true 失败返回string

例子

ftp.close().wait()

待解决问题:

1、 --錯誤提示:net_lwip_tcp_err_cb 637:adapter 1 socket 3 not closing, but error -13 待报issue;

        --print(ftp.command("LIST").wait()) --目录列表工具,能够列出FTP、本地磁盘上的目录内容,输出格式可以是树型图,也可以是URL、HTML、带格式文本文件等形式

2、执行pull时,--提示false,pull不成功,原因待查!

        print(ftp.pull("/1222.txt","/1222.txt").wait()) --FTP文件下载