main.lua 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. -- LuaTools需要PROJECT和VERSION这两个信息
  2. PROJECT = "ftpdemo"
  3. VERSION = "1.0.0"
  4. --[[
  5. 本demo需要ftp库, 大部分能联网的设备都具有这个库
  6. ftp也是内置库, 无需require
  7. ]]
  8. -- sys库是标配
  9. _G.sys = require("sys")
  10. --[[特别注意, 使用ftp库需要下列语句]]
  11. _G.sysplus = require("sysplus")
  12. local server_ip = "121.43.224.154" -- 服务器IP
  13. local server_port = 21 -- 服务器端口号
  14. local server_username = "ftp_user" -- 服务器登陆用户名
  15. local server_password = "3QujbiMG" -- 服务器登陆密码
  16. local is_ssl = flase -- 非ssl加密连接
  17. -- local is_ssl =true --如果是不带证书的加密打开这句话
  18. -- local ssl_encrypt = {
  19. -- server_cert = "/luadb/server_cert.cert",--服务器ca证书数据
  20. -- client_cert = "/luadb/client_cert.cert",--客户端证书数据
  21. -- client_key = "/luadb/client_key",-- 客户端私钥加密数据
  22. -- client_password = "naovswoivbfpfvjwpojv[pawjb[dsfjb]]"--客户端私钥口令数据
  23. -- }
  24. -- local is_ssl = ssl_encrypt --如果是带证书的加密,请将上述ssl_encrypt内的文件名换成自己的
  25. local local_name = "/123.txt" -- 模块内部文件名及其路径
  26. local remote_name = "/12222.txt" -- 服务器上的文件名及其路径
  27. sys.taskInit(function()
  28. -----------------------------
  29. -- 统一联网函数, 可自行删减
  30. ----------------------------
  31. if wlan and wlan.connect then
  32. -- wifi 联网, ESP32系列均支持
  33. local ssid = "luatos1234"
  34. local password = "12341234"
  35. log.info("wifi", ssid, password)
  36. wlan.init()
  37. wlan.setMode(wlan.STATION)
  38. wlan.connect(ssid, password, 1)
  39. elseif mobile then
  40. -- Air780E/Air600E系列
  41. -- mobile.simid(2)
  42. -- LED = gpio.setup(27, 0, gpio.PULLUP)
  43. -- device_id = mobile.imei()
  44. end
  45. sys.waitUntil("IP_READY") -- 死等到联网成功
  46. log.info("联网成功")
  47. -- 联网成功后发布联网成功的消息
  48. sys.publish("net_ready")
  49. end)
  50. --[[操作ftp的函数,因为用了sys.wait,请在task内调用
  51. 本函数每隔15S就会进行一次登陆到主动断开的操作,
  52. 如果您不需要断开 或者只需要单次,请修改本函数中的while true do逻辑
  53. ]]
  54. local function ftp_test()
  55. sys.waitUntil("net_ready") -- 死等到联网成功
  56. while true do
  57. sys.wait(1000)
  58. log.info("ftp 启动")
  59. log.info("登陆FTP服务器",
  60. ftp.login(nil, server_ip, server_port, server_username, server_password, is_ssl).wait())
  61. log.info("空操作,防止连接断掉", ftp.command("NOOP").wait())
  62. log.info("报告远程系统的操作系统类型", ftp.command("SYST").wait())
  63. log.info("指定文件类型", ftp.command("TYPE I").wait())
  64. log.info("显示当前工作目录名", ftp.command("PWD").wait())
  65. log.info("创建一个目录 目录名为QWER", ftp.command("MKD QWER").wait())
  66. log.info("改变当前工作目录为QWER", ftp.command("CWD /QWER").wait())
  67. log.info("返回上一层目录", ftp.command("CDUP").wait())
  68. log.info("删除名为QWER的目录", ftp.command("RMD QWER").wait())
  69. log.info("获取当前工作目录下的文件名列表", ftp.command("LIST").wait())
  70. log.info("在本地创建一个文件", "文件名及其目录为" .. local_name)
  71. io.writeFile(local_name, "23noianfdiasfhnpqw39fhawe;fuibnnpw3fheaios;fna;osfhisao;fadsfl")
  72. --[[如果下载失败,部分服务器可能会直接断开本次连接,如果遇到下述打印
  73. net_lwip_tcp_err_cb 662:adapter 1 socket 20 not closing, but error -14
  74. 是正常的,此处打印服务器主动断开客户端时会出现
  75. ]]
  76. log.info("下载服务器上的" .. remote_name, ftp.pull(remote_name, remote_name).wait())
  77. local f = io.open(remote_name, "r") -- 只读的方式打开服务器上下载的文件
  78. if f then
  79. local data = f:read("*a")
  80. f:close()
  81. log.info("ftp", "下载的文件" .. remote_name .. "内容是", data)
  82. else
  83. log.info("fs", "打开下载的文件失败")
  84. end
  85. sys.wait(1000) -- 等一秒 防止删除失败
  86. log.info("删除FTP服务器当前目录下的" .. remote_name, ftp.command("DELE " .. remote_name).wait())
  87. sys.wait(1000) -- 等一秒 防止覆盖失败
  88. log.info("上传本地的" .. local_name, "到服务器上并且更名为" .. remote_name,
  89. ftp.push(local_name, remote_name).wait())
  90. sys.wait(1000) -- 等一秒 防止关闭失败
  91. log.info("关闭本次和服务器之间链接", ftp.close().wait())
  92. log.info("meminfo", rtos.meminfo("sys"))
  93. sys.wait(15000)
  94. end
  95. end
  96. sys.taskInit(ftp_test)
  97. -- 用户代码已结束---------------------------------------------
  98. -- 结尾总是这一句
  99. sys.run()
  100. -- sys.run()之后后面不要加任何语句!!!!!