(最省事的辦法是直接找個免費的網絡空間 用這個空間的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