| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 |
- --[[
- demo说明:
- wifi信息: 修改 wlan.connect
- 服务器信息, 修改 s:host s:port
- 可访问 http://tcplab.openluat.com 获取一个临时的tcp端口, 只适合测试ASCII字符
- ]]
- -- LuaTools需要PROJECT和VERSION这两个信息
- PROJECT = "socket2demo"
- VERSION = "1.0.0"
- -- 引入必要的库文件(lua编写), 内部库不需要require
- sys = require("sys")
- log.info("main", "socket demo, tcp long connect")
- log.info("mac", wlan.get_mac())
- wlan.connect("uiot", "12345678") -- wifi信息在这里, 如果想用airkiss, 看app/playit/main.lua
- sys.subscribe("WLAN_READY", function ()
- print("!!! wlan ready event !!! send ntp")
- socket.ntpSync()
- end)
- local PB7 = 27
- gpio.setup(PB7, function(msg) log.info("IQR", "PB7/27", msg) end)
- sys.taskInit(function()
- -- 等待联网成功
- sys.waitUntil("WLAN_READY", 30000)
- while 1 do
- log.info("main", "socket loop")
- if wlan.ready() then
- collectgarbage("collect")
- collectgarbage("collect")
- local s = socket.tcp()
- -- inews.gtimg.com/newsapp_bt/0/11443709755/1000
- s:host("tcplab.openluat.com") -- 改成服务器ip或者域名
- s:port(52501) -- 改成服务器端口
- s:on("connect", function(id, re)
- -- 连接成功后, 发注册包 {mac:"AABBCCDDEEFF"}
- log.info("netc", "connect result", re)
- if re then
- local jdata = json.encode({mac=wlan.get_mac()})
- s:send(jdata)
- end
- end)
- s:on("recv", function(id, re)
- print("recv", id, #re, re)
- if re then
- -- 如果有数据就回显, 简单环路测试
- s:send(re)
- end
- end)
- --log.info("netc", "info", s)
- -- 启动tcp独立线程(系统级的)
- if s:start() == 0 then
- -- 启动成功后, 连接中断时必然有NETC_END_XX事件
- -- 因为是长连接, 就这样等着就差不多了
- while s:closed() == 0 do
- sys.waitUntil("NETC_END_" .. s:id(), 3000)
- -- 定时发个心跳什么的
- log.info("netc", "heartbeat ping")
- s:send("ping")
- end
- else
- log.info("netc", "netc start fail!!")
- end
- -- 一定要清理好, 不然内存泄漏, 模块内存少啊!!!
- s:clean()
- collectgarbage("collect")
- collectgarbage("collect")
- --sys_memdump()
- sys.wait(2000) -- 没连上, 或者断开了? 等2秒重试
- else
- log.info("wifi", "wifi NOT ready yet")
- sys.waitUntil("WLAN_READY", 30000)
- end
- end
- end)
- -- 用户代码已结束---------------------------------------------
- -- 结尾总是这一句
- sys.run()
- -- sys.run()之后后面不要加任何语句!!!!!
|