[关闭]
@miniknife 2020-03-17T11:45:39.000000Z 字数 15052 阅读 23780

sz.so 触动精灵苏泽扩展库(停止维护)

已不更新,最新版请查看:http://helpdoc.touchsprite.com/dev_docs/2187/764.html
开发手册


目录

使用须知

为了进一步降低脚本开发者门槛,触动精灵 iOS 2.x 以上版本集成了苏泽的扩展库,提供了一系列实用函数供开发者使用。
苏泽库已停止维护,部分函数 bug 不再进行修复,请尽快将代码用 ts.so 高级扩展库代替。

文件下载

苏泽扩展库(更新时间2016-5-17):sz.so

触动精灵 v2.0 及以上版本已集成,无需下载。

使用方法

请在脚本开头插入 local sz = require("sz") 即可调用扩展库中所有函数。

JSON 模块

函数名称:sz.json.encode、sz.json.decode
函数功能:json串编码、解码

脚本实例:

  1. local sz = require("sz")--使用sz库前必须插入这一句
  2. local json = sz.json--使用JSON 模块前必须插入这一句
  3. local tb = {
  4. ["我"] = "苏泽",
  5. ["爱"] = "娜娜",
  6. meme = {
  7. isArray = true,
  8. 1,0,0,4,6,9,5,1,0,0,
  9. },
  10. nullvalue = null,
  11. }
  12. local jsonstring = json.encode(tb);
  13. dialog(jsonstring, 0);
  14. local tmp = json.decode(jsonstring);
  15. dialog(tmp.meme[5], 0);
  16. dialog(tostring(tmp.nullvalue), 0);
  1. --unicode utf8
  2. local sz = require "sz"
  3. local tmp = sz.json.totable([[{"toUTF8":"\u6211\u7231\u5a1c\u5a1c"}]])
  4. dialog(tmp["toUTF8"],0)

注意事项:

在 JSON 格式的 ShowUI 时会用到 JSON 模块

FTP 模块

函数名称:ftp.download、ftp.upload、ftp.cmd
函数功能:FTP 上传、FTP 下载、执行 FTP 命令
函数方法:
ftp = sz.ftp
ftp.download(ftppath, path)
ftp.upload(path, ftppath)
ftp.cmd(ftppath, cmd)

参数 类型 说明
ftppath string 格式为 ftp://ftp 用户名:ftp密码@ftp服务器 IP 地址/文件名,文件名不可使用中文字符
path string 需填写完整路径
cmd string FTP 操作命令:DELE 删除,LIST 列出

脚本实例:
1. FTP 下载一个文件到本地

  1. local sz = require("sz")--使用苏泽库前一定要在开头插入这一句
  2. local ftp = sz.ftp--使用FTP 模块前一定要插入这一句
  3. _, err = ftp.download("ftp://admin:ts123456@192.168.1.0/config.dat", "/var/mobile/Media/TouchSprite/config/config.dat")--文件名不可使用中文字符
  4. if err then
  5. dialog(err, 0)
  6. else
  7. dialog("文件已下载成功", 0)
  8. end
  1. FTP 从本地上传一个文件到服务器
  1. local sz = require("sz")--使用苏泽库前一定要在开头插入这一句
  2. local ftp = sz.ftp--使用FTP 模块前一定要插入这一句
  3. _, err = ftp.upload("/var/mobile/Media/TouchSprite/lua/config.dat", "ftp://admin:ts123456@192.168.1.0/Games/")--文件名不可使用中文字符
  4. if err then
  5. dialog(err, 0)
  6. else
  7. dialog("文件已上传成功", 0)
  8. end
  1. 从 FTP 服务器上删除一个文件
  1. local sz = require("sz")--使用苏泽库前一定要在开头插入这一句
  2. local ftp = sz.ftp--使用FTP 模块前一定要插入这一句
  3. _, err = ftp.cmd("ftp://admin:ts123456@192.168.1.0/Games/", "DELE config.dat")--文件名不可使用中文字符
  4. if err then
  5. dialog(err, 0)
  6. else
  7. dialog("文件删除成功", 0)
  8. end
  1. 列出指定 FTP 服务器路径下的文件
  1. local sz = require("sz")--使用苏泽库前一定要在开头插入这一句
  2. local ftp = sz.ftp--使用FTP 模块前一定要插入这一句
  3. msg, err = ftp.cmd("ftp://admin:ts123456@192.168.1.0/Games/", "LIST")
  4. if err then
  5. dialog(err, 0)
  6. else
  7. dialog("文件列表\n"..msg, 0)
  8. end

注意事项:

  1. 使用本模块时填写的文件路径中,文件名不能使用中文字符
  2. 文件路径必须填写完整路径

设备信息模块

函数名称:sz.system.udid
函数功能:获取设备
函数方法
udid = sz.system.udid()
返回值:udid

返回值 类型 说明
udid string 设备 UDID

脚本实例:

  1. local sz = require("sz")
  2. udid = sz.system.udid() --获取设备的 UDID
  3. dialog(udid, 0)

函数名称:sz.system.serialnumber
函数功能:获取设备序列号
函数方法
serialnumber = sz.system.serialnumber()
返回值:serialnumber

返回值 类型 说明
serialnumber string 设备序列号

脚本实例:

  1. local sz = require("sz")
  2. serialnumber = sz.system.serialnumber()--获取设备的序列号
  3. dialog(serialnumber, 0)

函数名称:sz.system.wifimac
函数功能:获取设备 WiFi MAC地址
函数方法
wifimac = sz.system.wifimac()
返回值:string wifimac

返回值 类型 说明
wifimac string 设备 WiFi MAC 地址

脚本实例:

  1. local sz = require("sz")
  2. wifimac = sz.system.wifimac() --获取设备的 WiFi MAC 地址
  3. dialog(wifimac, 0)

函数名称:sz.system.btmac
函数功能:获取设备蓝牙 MAC 地址
函数方法
btmac = sz.system.btmac()
返回值:string btmac

返回值 类型 说明
btmac string 蓝牙 MAC 地址

脚本实例:

  1. local sz = require("sz")
  2. btmac = sz.system.btmac() --获取设备的蓝牙 MAC 地址
  3. dialog(btmac, 0)

函数名称:sz.system.osversion
函数功能:获取设备系统版本号
函数方法
osversion = sz.system.osversion()
返回值:string osversion

返回值 类型 说明
osversion string 设备系统版本号

脚本实例:

  1. local sz = require("sz")
  2. osversion = sz.system.osversion() --获取设备的系统版本号
  3. dialog(osversion, 0)

函数名称:sz.system.mgcopyanswer("ProductType")
函数功能:获取设备详细型号
函数方法
producttype = sz.system.mgcopyanswer("ProductType")
返回值:string producttype

返回值 类型 说明
producttype string 设备详细型号

脚本实例:

  1. local sz = require("sz")
  2. producttype = sz.system.mgcopyanswer("ProductType")--获取设备详细型号
  3. dialog(producttype,0)

注意事项:

详细型号指的是 iPhone5,3

函数名称:sz.system.mgcopyanswer("UserAssignedDeviceName")
函数功能:获取设备名称
函数方法
devicename = sz.system.mgcopyanswer("UserAssignedDeviceName")
返回值:string devicename

返回值 类型 说明
devicename string 设备名称

脚本实例:

  1. local sz = require("sz")
  2. devicename = sz.system.mgcopyanswer("UserAssignedDeviceName")--获取设备名称
  3. dialog(devicename,0)

注意事项:

获取的设备名称是 设置-通用-关于本机-名称 处用户自己设置的名称。

函数名称:sz.system.mgcopyanswer("InternationalMobileEquipmentIdentity")
函数功能:获取设备 IMEI
函数方法
imei = sz.system.mgcopyanswer("InternationalMobileEquipmentIdentity")
返回值:string imei

返回值 类型 说明
imei string 设备 IMEI

脚本实例:

  1. local sz = require("sz")
  2. imei = sz.system.mgcopyanswer("InternationalMobileEquipmentIdentity") --获取设备 IMEI
  3. dialog(imei,0)

函数名称:sz.system.localwifiaddr
函数功能:获取本地网络地址

脚本实例:

  1. local sz = require("sz")
  2. local ret = ""
  3. for i,v in ipairs(sz.system.localwifiaddr()) do --获取本地网络地址
  4. ret = ret..(v[1]).."="..(v[2]).."\n"
  5. end
  6. dialog(ret,0)

注意事项:

iOS 引擎版本 v2.1.9 以上版本中采用新版苏泽扩展库,sz.system.localwifiaddr() 将返回一个 TABLE,TABLE 中包含本地内部环回地址、蜂窝地址、本地 WiFi 地址。

字符串处理模块(仅支持 iOS)

函数名称:tohex、fromhex
函数功能:转码,字符串十六进制编码转换

脚本实例:

  1. local sz = require("sz")
  2. local str = "触动精灵"
  3. dialog('"'..str..'" 的 16 进制编码为: <'..str:tohex()..'>', 0) --“触动精灵”的 16 进制编码
  4. dialog('<'..str:tohex()..'> 转换成明文为: "'..str:tohex():fromhex()..'"', 0)--将上一行的 16 进制编码转换为明文字符

函数名称:md5
函数功能:字符串 MD5 计算
md5;
脚本实例:

  1. local sz = require("sz")
  2. local str = "触动精灵"
  3. local binstr = "\0\1\2\3\4\5"
  4. dialog('"'..str..'" 的 MD5 值是: '..str:md5(), 0)--计算"触动精灵" MD5
  5. dialog('<'..binstr:tohex()..'> 的 MD5 值是: '..binstr:md5(), 0)--计算“000102030405”的 MD5

函数名称:sha1
函数功能:字符串 SHA1 计算
sha1;
脚本实例:

  1. local sz = require("sz")
  2. local str = "触动精灵"
  3. local binstr = "\0\1\2\3\4\5"
  4. dialog('"'..str..'" 的 SHA1 值是: '..str:sha1(), 0)--计算"触动精灵" SHA1
  5. dialog('<'..binstr:tohex()..'> 的 SHA1 值是: '..binstr:sha1(), 0) --计算“000102030405”的 SHA1

函数名称:aes128_encrypt、aes128_decrypt、base64_encode、base64_decode
函数功能:字符串 AES128、BASE64 编解码

脚本实例:

  1. local sz = require("sz")
  2. local msg = "\5\4\3\2\1\0"
  3. local key = "触动精灵"
  4. local emsg = msg:aes128_encrypt(key)
  5. local emsgb64 = emsg:base64_encode()
  6. dialog('二进制数据<'..msg:tohex()..'> \n 使用 AES128 算法 密钥 "'..key..'" 加密 值是: <'..emsg:tohex()..'> \n base64 串为 "'..emsgb64..'"', 0)
  7. local tmp = emsgb64:base64_decode()
  8. msg = tmp:aes128_decrypt(key)
  9. dialog('"'..emsgb64..'" base64 解码后的数据为 <'..tmp:tohex()..'> \n使用 AES128 算法 密钥 "'..key..'" 解密 值是: <'..msg:tohex()..'>', 0)

函数名称:split、rtrim、ltrim、trim、atrim
函数功能:字符串分割、过滤
脚本实例:
字符串分割及空白字符过滤

  1. local sz = require("sz")
  2. str = " 哈哈,he he,1,3,6 "
  3. new = str:split(",") --将字符串str按照 `,` 分割并返回一个TABLE
  4. dialog(new[2], 0)
  5. dialog(str:rtrim(), 0) -- 结果 " 哈哈,he he,1,3,6" ,删除字符串尾部的空白字符
  6. dialog(str:ltrim(), 0) -- 结果 "哈哈,he he,1,3,6 " ,删除字符串首部的空白字符
  7. dialog(str:trim(), 0) -- 结果 "哈哈,he he,1,3,6" ,删除字符串首尾的空白字符
  8. dialog(str:atrim(), 0) -- 结果 "哈哈,hehe,1,3,6" ,删除字符串所有的空白字符

名词解析:

空白字符包括:空格、制表符 \t 、换行符 \n\r

函数名称:fromgbk
函数功能:转码,GBK 转 UTF8

脚本实例:
将字符串从 GBK 编码转换到 UTF8 编码(需iOS 引擎版本 v2.2.6 以上版本)

  1. require "sz"
  2. f = io.open("/var/mobile/Media/TouchSprite/res/a.txt", "r")
  3. s = f:read("*a")
  4. f:close()
  5. dialog(s:fromgbk())

函数名称:iconv
函数功能:字符集转换

脚本实例:

  1. --此功能需iOS 引擎版本 v2.2.7 以内置版本带的苏泽库支持方可使用
  2. local sz = require("sz")
  3. local iconv = sz.iconv
  4. local cd = iconv.new("utf8", "gbk") --新建一个gbkutf8编码的转换器
  5. local f = io.open("/var/mobile/Media/TouchSprite/res/1.txt", "rb")
  6. local s = f:read("*a")
  7. f:close()
  8. dialog(cd:iconv(s))

HTTP 模块

函数名称:http.get、http.post、http.header、http.build_request
函数功能:发送 http GET 请求、发送 http POST 请求
函数方法:
status_resp, headers_resp, body_resp = http.get("http://82flex.com", 5, headers_send);
status_resp, headers_resp, body_resp = http.post("http://dev.touchsprite.com/site/login", 3, headers_send, post_escaped)
参数 类型 说明
url string 请求URL (必须填写)
time_out number 超时时间(秒)
headers_send string 请求头部 json
post_escaped string 请求内容
返回值 类型 说明
status_resp number HTTP 状态码
headers_resp string 响应头部 json
body_resp string 响应内容

脚本实例:

  1. --采用 cjson 构造请求头部 json
  2. local sz = require("sz")
  3. local cjson = sz.json
  4. local http = sz.i82.http
  5. headers = {}
  6. headers['User-Agent'] = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36'
  7. headers['Referer'] = 'http://www.82flex.com'
  8. headers_send = cjson.encode(headers)
  9. dialog(headers_send,0)
  10. status_resp, headers_resp, body_resp = http.get("http://82flex.com", 5, headers_send)
  11. if status_resp ~= nil then
  12. dialog(status_resp,0)
  13. dialog(headers_resp,0)
  14. if status_resp == 200 then
  15. dialog(string.len(body_resp),0)
  16. end
  17. end
  1. --采用 cjson 构造请求头部 json
  2. local sz = require("sz")
  3. local cjson = sz.json
  4. local http = sz.i82.http
  5. headers = {}
  6. headers['User-Agent'] = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36'
  7. headers['Referer'] = 'http://dev.touchsprite.com/site/login'
  8. headers_send = cjson.encode(headers)
  9. dialog(headers_send,0)
  10. --采用 cjson 构造请求内容,并进行 escape
  11. post = {}
  12. post['username'] = "i_82"
  13. post['password'] = '12345678'
  14. post['text'] = '触动精灵'
  15. post_send = cjson.encode(post)
  16. dialog(post_send,0)
  17. post_escaped = http.build_request(post_send)
  18. dialog(post_escaped,0)
  19. status_resp, headers_resp, body_resp = http.post("http://dev.touchsprite.com/site/login", 3, headers_send, post_escaped)
  20. dialog(status_resp,0)
  21. dialog(headers_resp,0)
  22. if status_resp ~= nil then
  23. dialog(status_resp,0)
  24. dialog(headers_resp,0)
  25. if status_resp == 200 then
  26. dialog(string.len(body_resp),0)
  27. end
  28. --获取响应信息头部指定字段
  29. --方法一
  30. server = http.header(headers_resp, "Server")
  31. dialog(server,0)
  32. --方法二
  33. servers = cjson.decode(headers_resp)
  34. dialog(servers["Server"],0)
  35. end
  1. --用http.get实现下载文件功能
  2. local sz = require("sz")
  3. local cjson = sz.json
  4. local http = sz.i82.http
  5. function downFile(url, path)
  6. status, headers, body = http.get(url)
  7. if status == 200 then
  8. file = io.open(path, "wb")
  9. if file then
  10. file:write(body)
  11. file:close()
  12. return status;
  13. else
  14. return -1;
  15. end
  16. else
  17. return status;
  18. end
  19. end
  20. downFile("http://www.touchsprite.com/img/headline-new.png", "/User/Media/TouchSprite/res/1.png")

PLIST 文件操作(仅支持 iOS)

函数名称:plist.read、plist.write
函数功能:PLIST文件读取、写入
函数方法:
tmp2 = plist.read(plfilename);
返回值 TABLE
plist.write(plfilename, tmp2);

脚本实例:

  1. --读取键值
  2. local sz = require("sz")
  3. local plist = sz.plist
  4. local plfilename = "/var/mobile/Library/Caches/com.apple.mobile.installation.plist" --设置plist路径
  5. local tmp2 = plist.read(plfilename) --读取plist文件内容并返回一个TABLE
  6. dialog(tmp2.Metadata.ProductBuildVersion, 0) --显示ProductBuildVersion的键值
  1. --写入键值
  2. local sz = require("sz")
  3. local plist = sz.plist
  4. local plfilename = "/var/mobile/Library/Caches/com.apple.mobile.installation.plist" --设置plist路径
  5. local tmp2 = plist.read(plfilename) --读取plist文件内容并返回一个TABLE
  6. tmp2["Metadata"]["ProductBuildVersion"] = "havonz" --将表中ProductBuildVersion键值改为havonz
  7. plist.write(plfilename, tmp2) --将修改后的表写入PLIST文件

注意事项:

1.PLIST操作需要ts.so插件的支持,请下载ts.so后进行文件操作。
2. 实例代码仅做为参考,实际调试中请将文件路径替换为实际存在的文件路径。
3. 对于个别重要的 PLIST 文件,请谨慎使用写入功能或在运行脚本前进行备份。
4. 需要注意的是,nib 文件作为一种特殊的 plist 文件格式,不能被正确的读取。

POS 模块

函数名称:click
函数功能:单击
脚本实例:

  1. local sz = require("sz")
  2. local pos = sz.pos
  3. local p0 = pos(100, 150, 0x123456)
  4. local p1 = pos(556, 400, 0x654321)
  5. p0:click() -- 单击点 p0
  6. p0:click(100) -- 单击点 p0 按下 100 毫秒延迟 弹起

函数名称:dbclick
函数功能:双击

  1. local sz = require("sz")
  2. local pos = sz.pos
  3. local p0 = pos(100, 150, 0x123456)
  4. local p1 = pos(556, 400, 0x654321)
  5. p0:dbclick(100, 200) -- 双击点 p0 按下 100毫秒延迟 弹起 延迟 200 毫秒 重复第一步

函数名称:touchMoveTo
函数功能:精确滑动

  1. local sz = require("sz")
  2. local pos = sz.pos
  3. local p0 = pos(100, 150, 0x123456)
  4. local p1 = pos(556, 400, 0x654321)
  5. p0:touchMoveTo(p1, 2, 500, 1) -- 从点 p0 滑动到 p1 , 后面三个可选参数依次为:步长、弹起延迟、每步延迟

函数名称:angleBetween
函数功能:计算角度

脚本实例:

  1. local sz = require("sz")
  2. local pos = sz.pos
  3. local p0 = pos(100, 150, 0x123456)
  4. local p1 = pos(556, 400, 0x654321)
  5. dialog(" p0 到 p1 的角度为: "..p0:angleBetween(p1), 0)

函数名称:distanceBetween
函数功能:计算距离

脚本实例:

  1. local sz = require("sz")
  2. local pos = sz.pos
  3. local p0 = pos(100, 150, 0x123456)
  4. local p1 = pos(556, 400, 0x654321)
  5. dialog(" p0 到 p1 的距离为: "..p0:distanceBetween(p1), 0)

函数名称:polarProjection
函数功能:根据角度和距离找点

脚本实例:

  1. local sz = require("sz")
  2. local pos = sz.pos
  3. local p0 = pos(100, 150, 0x123456)
  4. local p1 = pos(556, 400, 0x654321)
  5. dialog(" p0 往 30 度方向前进 200 距离单位的另一个点: "..tostring(p0:polarProjection(200, 30)), 0)

函数名称:cmpColor
函数功能:计算颜色相似度

脚本实例:

  1. local sz = require("sz")
  2. local pos = sz.pos
  3. local p0 = pos(100, 150, 0x123456)
  4. local p1 = pos(556, 400, 0x654321)
  5. dialog("颜色 0x102030 与颜色 0x122232 的相似度为: "..pos.cmpColor( 0x102030, 0x122232), 0)
  6. dialog("p0 结构的颜色与颜色 0x123456 相似度为: "..p0:cmpColor(0x123456), 0)

在触动精灵中使用网络库 (仅支持iOS)

LuaSocket 是 Lua 的网络模块库,它可以很方便地提供 TCP、UDP、DNS、FTP、HTTP、SMTP、MIME 等多种网络协议的访问操作。

注意事项:

帮你玩开发者平台禁用此函数库,打码请使用函数扩展库代替,详见[函数扩展库开发手册][59]

如何安装

在触动精灵iOS v2.1.9 及以上版本中包含的苏泽扩展库中已经集成了luasocket,无需额外下载安装。

httpGet请求

脚本示例:

  1. local sz = require("sz")
  2. local http = require("szocket.http")
  3. local res, code = http.request("http://www.baidu.com");
  4. if code == 200 then
  5. dialog(res,0);
  6. end
  7. --也可以这样
  8. local response_body = {}
  9. local res, code = http.request({
  10. url = "http://www.baidu.com",
  11. sink = ltn12.sink.table(response_body)
  12. })
  1. --获取外网ip地址
  2. local sz = require("sz")
  3. local http = require("szocket.http")
  4. local res, code = http.request("http://www.ip.cn/");--如果此网址无反应,请尝试替换为 http://1212.ip138.com/ic.asp 或其他网址
  5. if code == 200 then
  6. local i,j = string.find(res, "%d+%.%d+%.%d+%.%d+")
  7. local ipaddr =string.sub(res,i,j)
  8. dialog(ipaddr,0)
  9. end

注意事项:

  1. 返回的2个参数中,res 是 http body 的内容,也就是请求网页的内容,code 是 http 状态码, 返回200的话就表示正常返回。
  2. 如果传入的是 table 的话,就需要用一个容器来接收 http body 的内容。

httpPost 请求

脚本示例:

  1. local sz = require("sz")--此代码仅为举例说明,请勿直接复制使用。
  2. local http = require("szocket.http")
  3. local response_body = {}
  4. local post_data = 'asd';
  5. res, code = http.request{
  6. url = "http://127.0.0.1/post.php",
  7. method = "POST",
  8. headers =
  9. {
  10. ["Content-Type"] = "application/x-www-form-urlencoded",
  11. ["Content-Length"] = #post_data,
  12. },
  13. source = ltn12.source.string('data=' .. post_data),
  14. sink = ltn12.sink.table(response_body)
  15. }

注意事项:

  1. 这里注意记得 method 传入 POST, 因为默认是 GET。
  2. headers 参数,由一个 table 组成,key 为 header,value 为 header 内容。
  3. source 参数,这里是填入 POST 的参数,多个数据的情况用 & 隔开,例如 "data1=a&data2=b"。
  4. 此代码仅为举例说明,请勿直接复制使用。

挂载代理

脚本示例:

  1. --必须加上 http:// 否则不处理
  2. local sz = require("sz")
  3. local http = require("szocket.http")
  4. http.PROXY = "http://127.0.0.1:8888" --代理服务器地址
  5. local result = http.request("http://www.baidu.com")
  6. dialog(result,0)

以 socket 的方式访问

脚本示例:

  1. local sz = require("sz")
  2. local http = require("szocket.http")
  3. local host = "www.baidu.com"
  4. local file = "/"
  5. local sock = assert(socket.connect(host, 80)) --创建一个 TCP 连接,连接到 HTTP 连接的标准 80 端口上
  6. sock:send("GET " .. file .. " HTTP/1.0\r\n\r\n")
  7. repeat
  8. local chunk, status, partial = sock:receive(1024) --以 1K 的字节块接收数据
  9. until status ~= "closed"
  10. sock:close() -- 关闭 TCP 连接

smtp 方法发送 mail

脚本示例:

  1. local sz = require("sz")
  2. local smtp = require("szocket.smtp")
  3. from = "<youmail@126.com>" -- 发件人
  4. --发送列表
  5. rcpt = {
  6. "<youmail@126.com>",
  7. "<youmail@qq.com>",
  8. "<youmail@gmail.com>",
  9. }
  10. mesgt = {
  11. headers = {
  12. to = "youmail@gmail.com", -- 收件人
  13. cc = '<youmail@gmail.com>', -- 抄送
  14. subject = "This is Mail Title"
  15. },
  16. body = "这里放邮件内容"
  17. }
  18. r, e = smtp.send{
  19. server = "smtp.126.com", --smtp服务器地址
  20. user = "youmail@126.com",--smtp验证用户名
  21. password = "******", --smtp验证密码
  22. from = from,
  23. rcpt = rcpt,
  24. source = smtp.message(mesgt)
  25. }
  26. if not r then
  27. dialog(e,0)
  28. else
  29. dialog("发送成功!",0)
  30. end

实现获取网络时间

脚本示例:

  1. local sz = require("sz")
  2. local socket = require "szocket.core"
  3. server_ip = {
  4. "132.163.4.101",
  5. "132.163.4.102",
  6. "132.163.4.103",
  7. "128.138.140.44",
  8. "192.43.244.18",
  9. "131.107.1.10",
  10. "66.243.43.21",
  11. "216.200.93.8",
  12. "208.184.49.9",
  13. "207.126.98.204",
  14. "207.200.81.113",
  15. "205.188.185.33"
  16. }
  17. function nstol(str)
  18. assert(str and #str == 4)
  19. local t = {str:byte(1,-1)}
  20. local n = 0
  21. for k = 1, #t do
  22. n= n*256 + t[k]
  23. end
  24. return n
  25. end
  26. function gettime(ip)
  27. local tcp = socket.tcp()
  28. tcp:settimeout(10)
  29. tcp:connect(ip, 37)
  30. success, time = pcall(nstol, tcp:receive(4))
  31. tcp:close()
  32. return success and time or nil
  33. end
  34. function nettime()
  35. for _, ip in pairs(server_ip) do
  36. time = gettime(ip)
  37. if time then
  38. return time
  39. end
  40. end
  41. end
  42. dialog(nettime(),0)

统计毫秒精度的时间

脚本示例:

  1. local sz = require("sz")
  2. local socket = require ("szocket")
  3. function sleep(sec)
  4. socket.select(nil,nil,sec);
  5. end
  6. local t0 = socket.gettime()
  7. sleep(0.4);
  8. local t1 = socket.gettime()
  9. dialog(t1 - t0,0)

生成随机数

脚本示例:
1. 设置随机种子

  1. --设置随机种子
  2. local sz = require("sz")
  3. local socket = require("szocket") -- 需要用到luasocket
  4. local function get_seed()
  5. local t = string.format("%f", socket.gettime())
  6. local st = string.sub(t, string.find(t, "%.") + 1, -1)
  7. return tonumber(string.reverse(st))
  8. end
  9. math.randomseed(get_seed())
  10. for var = 1,5 do
  11. nLog(math.random())
  12. end
  1. 随机字符串
  1. --随机字符串
  2. function randomStr(str, num)
  3. local ret =''
  4. for i = 1, num do
  5. local rchr = math.random(1, string.len(str))
  6. ret = ret .. string.sub(str, rchr, rchr)
  7. end
  8. return ret
  9. end
  10. --用法
  11. for var = 1,5 do
  12. s = randomStr("abcdefghijklmnopqrstuvwxyz", 6) --生成6位随机字母
  13. nLog(s)
  14. end
  1. 随机大小写
  1. --随机大小写
  2. function rndLetter(num)
  3. local ret = ""
  4. pcall(function()
  5. for var = 1,num do
  6. if math.random()>0.5 then
  7. ret = ret..string.char(math.random(65,90))
  8. else
  9. ret = ret..string.char(math.random(97,122))
  10. end
  11. end
  12. end)
  13. return ret
  14. end
  15. --用法
  16. math.randomseed(tonumber(tostring(os.time()):reverse():sub(1,6))) --设置随机种子
  17. for var = 1,5 do
  18. nLog(rndLetter(10)) --生成一个10位随机大小写字母的字符串
  19. end
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注