Просмотр исходного кода

Merge branch 'master' of https://gitee.com/openLuat/LuatOS

alienwalker 3 лет назад
Родитель
Сommit
6cd523693b
2 измененных файлов с 148 добавлено и 0 удалено
  1. 101 0
      demo/socket/EC618_W5500/async_socket_demo.lua
  2. 47 0
      demo/socket/EC618_W5500/main.lua

+ 101 - 0
demo/socket/EC618_W5500/async_socket_demo.lua

@@ -0,0 +1,101 @@
+-- netlab.luatos.com上打开TCP,然后修改IP和端口号,自动回复netlab下发的数据,自收自发测试
+
+local server_ip = "152.70.80.204"
+local server_port = 52444 
+local UDP_port = 37834
+local ssl_port = 35528
+local rxbuf = zbuff.create(8192)
+local function netCB(netc, event, param)
+    if param ~= 0 then
+        sys.publish("socket_disconnect")
+        return
+    end
+	if event == socket.LINK then
+	elseif event == socket.ON_LINE then
+        socket.tx(netc, "hello,luatos!")
+	elseif event == socket.EVENT then
+        socket.rx(netc, rxbuf)
+        socket.wait(netc)
+        if rxbuf:used() > 0 then
+            log.info("收到", rxbuf:toStr(0,rxbuf:used()):toHex())
+            log.info("发送", rxbuf:used(), "bytes")
+            socket.tx(netc, rxbuf)
+        end
+        rxbuf:del()
+	elseif event == socket.TX_OK then
+        socket.wait(netc)
+        log.info("发送完成")
+	elseif event == socket.CLOSE then
+        sys.publish("socket_disconnect")
+    end
+end
+
+local function socketTask()
+	local netc = socket.create(socket.ETH0, netCB)
+	socket.debug(netc, true)
+	socket.config(netc, nil, nil, nil, 300, 5, 6)   --开启TCP保活,防止长时间无数据交互被运营商断线
+    while true do
+        local succ, result = socket.connect(netc, server_ip, server_port)
+        if not succ then
+            log.info("未知错误,5秒后重连")
+        else
+            local result, msg = sys.waitUntil("socket_disconnect")
+        end
+        log.info("服务器断开了,5秒后重连")
+        socket.close(netc)
+        log.info(rtos.meminfo("sys"))
+        sys.wait(5000)
+    end
+end
+
+local function UDPTask()
+    local netc = socket.create(socket.ETH0, netCB)
+    socket.debug(netc, true)
+    socket.config(netc, nil, true, nil, 300, 5, 6)   --开启TCP保活,防止长时间无数据交互被运营商断线
+    while true do
+        local succ, result = socket.connect(netc, server_ip, UDP_port)
+        if not succ then
+            log.info("未知错误,5秒后重连")
+        else
+            local result, msg = sys.waitUntil("socket_disconnect")
+        end
+        log.info("服务器断开了,5秒后重连")
+        socket.close(netc)
+        log.info(rtos.meminfo("sys"))
+        sys.wait(5000)
+    end
+end
+
+
+local function SSLTask()
+    local netc = socket.create(socket.ETH0, netCB)
+    socket.debug(netc, true)
+    socket.config(netc, nil, nil, true, 300, 5, 6)   --开启TCP保活,防止长时间无数据交互被运营商断线
+    while true do
+        local succ, result = socket.connect(netc, server_ip, ssl_port)
+        if not succ then
+            log.info("未知错误,5秒后重连")
+        else
+            local result, msg = sys.waitUntil("socket_disconnect")
+        end
+        log.info("服务器断开了,5秒后重连")
+        socket.close(netc)
+        log.info(rtos.meminfo("sys"))
+        sys.wait(5000)
+    end
+end
+
+function socketDemo()
+    mobile.rtime(1)
+	sys.taskInit(socketTask)
+end
+
+function UDPDemo()
+    mobile.rtime(1)
+    sys.taskInit(UDPTask)
+end
+
+function SSLDemo()
+    mobile.rtime(1)
+    sys.taskInit(SSLTask)
+end

+ 47 - 0
demo/socket/EC618_W5500/main.lua

@@ -0,0 +1,47 @@
+
+-- LuaTools需要PROJECT和VERSION这两个信息
+PROJECT = "my_test"
+VERSION = "1.2"
+PRODUCT_KEY = "s1uUnY6KA06ifIjcutm5oNbG3MZf5aUv" --换成自己的
+-- sys库是标配
+_G.sys = require("sys")
+_G.sysplus = require("sysplus")
+log.style(1)
+
+w5500.init(0, 25600000, 8, 18, 1)
+
+w5500.config()	--默认是DHCP模式
+w5500.bind(socket.ETH0)
+
+----------------------------------------
+-- 报错信息自动上报到平台,默认是iot.openluat.com
+-- 支持自定义, 详细配置请查阅API手册
+-- 开启后会上报开机原因, 这需要消耗流量,请留意
+if errDump then
+    errDump.config(true, 600)
+end
+----------------------------------------
+
+
+-- 如果运营商自带的DNS不好用,可以用下面的公用DNS
+-- socket.setDNS(nil,1,"223.5.5.5")	
+-- socket.setDNS(nil,2,"114.114.114.114")
+
+socket.sntp()
+--socket.sntp("ntp.aliyun.com") --自定义sntp服务器地址
+--socket.sntp({"ntp.aliyun.com","ntp1.aliyun.com","ntp2.aliyun.com"}) --sntp自定义服务器地址
+sys.subscribe("NTP_UPDATE", function()
+    log.info("sntp", "time", os.date())
+end)
+sys.subscribe("NTP_ERROR", function()
+    log.info("socket", "sntp error")
+    socket.sntp()
+end)
+
+require "async_socket_demo"
+socketDemo()
+
+-- 用户代码已结束---------------------------------------------
+-- 结尾总是这一句
+sys.run()
+-- sys.run()之后后面不要加任何语句!!!!!