1、FTP服务器准备
本机为win11系统,利用IIS搭建FTP服务器。
搭建方式可参考博文:windows系统搭建FTP服务器教程
windows系统搭建FTP服务器教程_程序员路遥的博客-CSDN博客_windows服务器安装ftp
设置完成后,测试FTP(已正常访问,测试ls列出服务器上的文件):
外网IP映射至本地FTP服务器(采用小米球做内网端口映射)。
可参考
- 小米球官网:Ngrok国内免费服务器-小米球ngrok
- 博文:小米球外网映射本地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()) --设置编码类型为I
print(ftp.command("PWD").wait()) --返回指定 FTP 连接的当前目录名称
print(ftp.command("MKD QWER").wait()) --创建路径 QWER
print(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 then
local data = f:read("*a")
f:close()
log.info("fs", "writed data", data)
else
log.info("fs", "open file for read failed")
end
print(ftp.command("DELE /12222.txt").wait()) --删除服务器上的文件
print(ftp.push("/1222.txt","/12222.txt").wait()) --上传文件1222-1.txt至服务器根目录,改名为12222.txt
print(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 End
550-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为有证书的加密 |
返回值
返回值类型 | 解释 |
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文件下载