消息透传服务器,Luat实例教程:tcp透传

本示例实现的功能是:基于TCP的socket透传demo项目,uart1透传数据到指定服务器。

功能描述:

1、数据网络准备就绪后,连接后台

2、连接成功后,循环“读取mcu通过串口发送过来的数据,每次最多发送1K字节”

3、与后台保持长连接,断开后主动再去重连,连接成功仍然按照第2条发送数据

4、收到后台的数据时,在rcv函数中打印出来,并且通过串口透传给mcu

测试时请搭建自己的服务器,并且修改下面的PROT,ADDR,PORT,支持域名和IP地址

此例子为长连接,只要是软件上能够检测到的网络异常,可以自动去重新连接

1.本功能需要socket和uart两个模块,所以分为两个文件来实现。实现sockt功能,在编辑工具建立一个sck.lua的文件(不一定叫这个名字,用户可以自己随便取名)

2.设置本文件被全体可见。也就意味着,一旦test被某一文件加载,则test在任何文件中均可被看见,即test中全局变量和函数均可被任何文件调用。

module(...,package.seeall)

3.test文件头需要 require "xxx" 模块。加载后,就可以调用xxx.lua库文件中的全局变量和函数了

require"socket"

4.定义print函数,调试用

local function print(...)

_G.print("sck",...)

end

5.定义相关参数

local ssub,schar,smatch,sbyte,slen = string.sub,string.char,string.match,string.byte,string.len

--测试时请搭建自己的服务器

local SCK_IDX,PROT,ADDR,PORT = 1,"TCP","120.26.196.195",9999

--linksta:与后台的socket连接状态

local linksta

--一个连接周期内的动作:如果连接后台失败,会尝试重连,重连间隔为RECONN_PERIOD秒,最多重连RECONN_MAX_CNT次

--如果一个连接周期内都没有连接成功,则等待RECONN_CYCLE_PERIOD秒后,重新发起一个连接周期

--如果连续RECONN_CYCLE_MAX_CNT次的连接周期都没有连接成功,则重启软件

local RECONN_MAX_CNT,RECONN_PERIOD,RECONN_CYCLE_MAX_CNT,RECONN_CYCLE_PERIOD = 3,5,3,20

--reconncnt:当前连接周期内,已经重连的次数

--reconncyclecnt:连续多少个连接周期,都没有连接成功

--一旦连接成功,都会复位这两个标记

--conning:是否在尝试连接

local reconncnt,reconncyclecnt,conning = 0,0

--正在发送的数据

local sndingdata = ""

6.创建到后台服务器的连接

--[[创建到后台服务器的连接;

如果数据网络已经准备好,会理解连接后台;否则,连接请求会被挂起,等数据网络准备就绪后,自动去连接后台 ntfy:socket状态的处理函数

rcv:socket接收数据的处理函数]]--

function connect()

socket.connect(SCK_IDX,PROT,ADDR,PORT,ntfy,rcv)

conning = true

end

7.socket状态的处理函数

--[[

函数名:ntfy

功能 :socket状态的处理函数

参数 :

idx:number类型,socket.lua

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值