(最省事的办法是直接找个免费的网络空间 用这个空间的ftp作测试就好)html
http://soft.onlinedown.net/soft/8718.htm FileZilla Server 0.9.43 中文版和对应的配置流程json
注意 ftp目录必须是共享文件夹 不然会提示报错 windows
http://www.xitongcheng.com/jiaocheng/win10_article_48002.html win10下共享文件夹的建立安全
建立成功后 咱们能够用局域网ip来尝试访问咱们刚刚创建好的ftp服务器 能够正常使用 这个ftp服务器在当前网段的局域网内是能够自由访问的 更加复杂的就不深究了服务器
整合了下 汇总成一个函数网络
--从指定的ftp服务器下载指定的文件 而后返回下载文件的内容 --参数ftpPath,ftpUser,ftpPwd,ftpDownloadToPath,ftpDownloadPath -- ftpPath="192.168.1.101"--默认端口就是21 这就不写了 -- ftpUser="zjl"--ftp帐号 -- ftpPwd="123"--ftp密码 -- ftpDownloadToPath=userPath() .. "/res/ftp_1.txt"--从ftp下载的文件放到哪里 -- ftpDownloadPath="/1.txt"--要下载ftp服务器的文件路径 --返回值 失败了返回false 成功则返回下载的文件内容 function getFtpFileContents(ftpPath,ftpUser,ftpPwd,ftpDownloadToPath,ftpDownloadPath) return try{ function () --下面代码随便写 有可能抛出异常便可 local ts=require("ts") local status,dwStatus local result=false ts.ftp.setFTPTimeOut(15) --设置 FTP 超时时间 status = ts.ftp.connect(ftpPath,ftpUser,ftpPwd); if status then dwStatus = ts.ftp.download(ftpDownloadToPath,ftpDownloadPath) --下载服务器上文件到本地 if dwStatus then if isFileExist(ftpDownloadToPath) then result=readFileString(ftpDownloadToPath) else error("下载成功的文件并不存在") end else --toast("下载文件失败", 1) error("下载文件失败") end ts.ftp.close()--断开 这个是必需要写的 else error("链接ftp服务器失败") end return result end, catch{ function (errors) --这里对应函数名要改 local tempStr="" tempStr="函数[" .. tostring("getFtpFileContents") .. "] 错误信息:".. tostring(errors) traceprint(tempStr) dialog(tempStr, 3) end } } end --使用实例 ftpPath="192.168.1.101"--默认端口就是21 这就不写了 ftpUser="zjl" ftpPwd="123" ftpDownloadToPath=userPath() .. "/res/ftp_1.txt"--从ftp下载的文件放到哪里 ftpDownloadPath="/1.txt"--要下载ftp服务器的文件路径 tempStr1=getFtpFileContents(ftpPath,ftpUser,ftpPwd,ftpDownloadToPath,ftpDownloadPath) if tempStr1 then traceprint(tempStr1) else traceprint("没有得到ftp文件内容") end
如何避免json字符串转化表不崩溃app
通常而言我习惯中控文件的内容是 json字符串或者xml 这样很是方便解析成表 可是有个问题 一旦传递进函数的不是json标准的字符串 那么解析就会报错函数
--json字符串转换为表 由于若是字符串不符合json标准 就会报错 因此咱们这里把这个功能封装一下 表转化json字符串不用管除非传递进去的是函数变量 不然不会报错 --使用的时候先判断函数的返回结果是nil false 仍是真 是真的话天然返回的就是成功转化的表 --[[ local temp3=jsonStrToTable(jsonstring) if temp3 then else traceprint("字符串不符合json标准 没法转化 启用默认配置") temp3=defaultFtpConfig end --]] function jsonStrToTable(jsonStr) return try{ function () --下面代码随便写 有可能抛出异常便可 local ts=require("ts") local json = ts.json local result=false result=json.decode(jsonStr) return result end, catch{ function (errors) --这里对应函数名要改 local tempStr="" tempStr="函数[" .. tostring("jsonStrToTable") .. "] 错误信息:".. tostring(errors) traceprint(tempStr) --dialog(tempStr, 3) toast(tempStr) mSleep(3000) end } } end
那就是做为一个最简易的中控平台来使用 以上面创建起来的局域网ftp服务器为例工具
假如 当前局域网内 有10台手机运行触动脚本 这些脚本均可以经过触动提供的ftp函数来访问 这个ftp服务器上的1.txt的内容测试
若是咱们想经过ftp服务器上的1.txt来控制这10台手机的触动脚本的运行 那么应该如何写
须要注意的是 一旦访问不到ftp服务器 可是本机能够正常访问ftp服务器 检查下本机的杀毒软件 安全大师之类的 windows自带的防火墙也关闭一下以防万一 不少时候不是ftp服务器设置的问题 都是其余的阻碍 我我的用的测试环境是雷电模拟器 要保证当前环境和ftp服务器在一个网段 雷电模拟器有桥接方式 我直接指定网关和局域网ip 这样才能正常链接到ftp服务器
注意:苹果手机下测试链接ftp服务器 工具选择很重要 ftpmanage就总是提示权限不足 链接不上 换了nplayer就能够正常链接和下载了
--[[ =====脚本的基本流程==== 启动app读取当前帐号并登陆帐号
签到 检查邮箱 整理背包 买药 --平常开始 平常沃玛教主 --最多能够打4次天天 平常祖玛教主 --最多能够打4次天天 平常赤月恶魔 --最多能够打2次天天 平常火龙 --最多能够打1次天天 平常副本挑战 --最多能够打2次天天 退出帐号 ====启动app读取当前帐号并登陆帐号 和 退出帐号是必须的 中间的这些模块 均可以有 也能够没有 或者次数不必定就是固定的==== --]]
--{"平常赤月恶魔":2,"平常火龙":1,"整理背包":1,"平常沃玛教主":2,"检查邮箱":1,"平常副本挑战":2,"平常祖玛教主":4,"签到":1}
--[[ =====脚本的基本流程==== 启动app读取当前帐号并登陆帐号 签到 检查邮箱 整理背包 买药 --平常开始 平常沃玛教主 --最多能够打4次天天 平常祖玛教主 --最多能够打4次天天 平常赤月恶魔 --最多能够打2次天天 平常火龙 --最多能够打1次天天 平常副本挑战 --最多能够打2次天天 退出帐号 ====启动app读取当前帐号并登陆帐号 和 退出帐号是必须的 中间的这些模块 均可以有 也能够没有 或者次数不必定就是固定的==== --]] --方便理解 我就用汉字命名 local ts = require("ts")--使用扩展库前必须插入这一句 local json = ts.json--使用 JSON 模块前必须插入这一句 FtpConfig={} --脚本配置表 defaultFtpConfig={} --这个只是为了万一没法从ftp获取到正确的json字符串 就使用这个默认的脚本配置表 defaultFtpConfig["签到"]=1 defaultFtpConfig["检查邮箱"]=1 defaultFtpConfig["整理背包"]=1 defaultFtpConfig["平常沃玛教主"]=4 defaultFtpConfig["平常祖玛教主"]=4 defaultFtpConfig["平常赤月恶魔"]=4 defaultFtpConfig["平常火龙"]=1 defaultFtpConfig["平常副本挑战"]=2 --开始读取帐号文件的帐号和密码 accountPath=userPath().."/res/test.txt" --帐号文件位置 accountTable=readFile(accountPath) --读取文件内容,返回一个 table account="" pwd="" tempTable1={} tempTable2={} tempStr1="" --ftp相关变量 ftpPath="192.168.1.101"--默认端口就是21 这就不写了 ftpUser="zjl" ftpPwd="123" ftpDownloadToPath=userPath() .. "/res/ftp_1.txt"--从ftp下载的文件放到哪里 ftpDownloadPath="/1.txt"--要下载ftp服务器的文件路径 --整个循环是遍历帐号密码的 for k,v in pairs(accountTable) do if string.trim(v)~="" then--本行的帐号密码信息不是空 才会执行对应操做 为空天然开始下个帐号的读取 tempTable1=strSplit(v,"-")--分析出帐号和密码 account=string.trim(tempTable1[1]) account=string.trim(tempTable1[2]) --访问ftp 获取脚本配置的json字符串 并转化为脚本配置表 tempStr1=getFtpFileContents(ftpPath,ftpUser,ftpPwd,ftpDownloadToPath,ftpDownloadPath) if tempStr1 then--判断下是否从ftp取到了对应的json配置字符串 --成功获取了后 开始把json字符串转化为脚本配置表 tempTable2=jsonStrToTable(jsonstring) if tempTable2 then --成功把json字符串转化为表 克隆默认配置表 省得污染它 FtpConfig= deepCopyTable(tempTable2) else --转化失败 脚本配置表等于默认的配置表内容 toast("从ftp获取到的内容不是json字符串 用默认的配置表内容",3) FtpConfig=defaultFtpConfig mSleep(3000) end else --根本没从ftp获取到任何符合要求的内容 天然是用默认的配置表内容 toast("没法从ftp获取到任何符合要求的内容 用默认的配置表内容",3) FtpConfig=defaultFtpConfig mSleep(3000) end --启动app读取当前帐号并登陆帐号操做 --签到 for i=1,tonumber( FtpConfig["签到"]) do --签到操做部分 end --检查邮箱 for i=1,tonumber( FtpConfig["检查邮箱"]) do --检查邮箱操做部分 end --整理背包 for i=1,tonumber( FtpConfig["整理背包"]) do --整理背包操做部分 end --买药 for i=1,tonumber( FtpConfig["买药"]) do --买药操做部分 end --平常开始 --平常沃玛教主 --最多能够打4次天天 for i=1,tonumber( FtpConfig["平常沃玛教主"]) do --平常沃玛教主操做部分 end --平常祖玛教主 --最多能够打4次天天 for i=1,tonumber( FtpConfig["平常祖玛教主"]) do --平常祖玛教主操做部分 end --平常赤月恶魔 --最多能够打2次天天 for i=1,tonumber( FtpConfig["平常赤月恶魔"]) do --平常赤月恶魔操做部分 end --平常火龙 --最多能够打1次天天 for i=1,tonumber( FtpConfig["平常火龙"]) do --平常火龙操做部分 end --平常副本挑战 --最多能够打2次天天 for i=1,tonumber( FtpConfig["平常副本挑战"]) do --平常副本挑战操做部分 end --退出帐号 --异常处理 应对上面出现的意外状况进行处理 保证脚本顺利的执行下个帐号 mSleep(500) end end
123