tcpsrv.lua 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. local libnet = require "libnet"
  2. --下面演示用阻塞方式做自动应答服务器,只适合W5500
  3. local dName = "D2_TASK"
  4. local function netCB(msg)
  5. log.info("未处理消息", msg[1], msg[2], msg[3], msg[4])
  6. end
  7. local function serTask(port, adapter)
  8. log.info("tcpsrv", "准备监听端口", socket.localIP(adapter), port)
  9. local tx_buff = zbuff.create(1024)
  10. local rx_buff = zbuff.create(1024)
  11. local netc
  12. local result, param, succ, rIP, rPort
  13. netc = socket.create(adapter, dName)
  14. socket.debug(netc, true)
  15. socket.config(netc, port)
  16. log.info("netc", netc)
  17. -- result = libnet.waitLink(dName, 0, netc)
  18. clients = {}
  19. local buff = zbuff.create(1024)
  20. while true do
  21. log.info("开始监听客户端连接, 无限时长")
  22. -- sys.wait(1000)
  23. result, code = libnet.listen(dName, 0, netc)
  24. log.info("监听结果", result, code)
  25. if result then
  26. log.info("有客户端连接请求到来, 接受连接")
  27. result, client = socket.accept(netc, function(client, event, param)
  28. log.info("客户端事件", client, event, params)
  29. if event == socket.EVENT then
  30. local result = socket.rx(client, buff)
  31. log.info("客户端数据到来", result, buff:used())
  32. buff:seek(0)
  33. end
  34. end)
  35. socket.debug(client, true)
  36. if result then
  37. table.insert(clients, client)
  38. log.info("客户端连上了", client, "发送个问候")
  39. log.info("发送数据", socket.tx(client, "helloworld"))
  40. end
  41. else
  42. log.info("监听失败或超时", result, code)
  43. break
  44. end
  45. --sys.wait(1000)
  46. end
  47. libnet.close(dName, 5000, netc)
  48. log.info("服务器关闭了")
  49. end
  50. function SerDemo(port, adapter)
  51. sysplus.taskInitEx(serTask, dName, netCB, port, adapter)
  52. end
  53. -- sys.taskInit(function()
  54. -- while 1 do
  55. -- sys.wait(1000)
  56. -- log.info("meminfo", rtos.meminfo("sys"))
  57. -- end
  58. -- end)