服务器与Air780E模组的加密通信讲解详情!

打印 上一主题 下一主题

主题 864|帖子 864|积分 2592

今天咋们来讲解服务器与Air780E模组的加密通信,
让咋们对加密通信相识跟透彻:

1.编写脚本

1.1 预备资料

Air780E开辟板购买
Air780E开辟板计划资料
LuatOS-Air780E/网络加密通信程序源码demo
合宙的 TCP/UDP 测试服务器
API介绍分析
1.2 程序详解

1.2.1 首先设置联网设置
  1. [/code] --=============================================================
  2. [code]-- 测试网站 https://netlab.luatos.com/ 点击 打开TCP 获取测试端口号
  3. -- 要按实际情况修改
  4. local host = "112.125.89.8" -- 服务器ip或者域名, 都可以的
  5. local port = 45186           -- 服务器端口号
  6. local is_udp = false        -- 如果是UDP, 要改成true, false就是TCP
  7. local is_tls = true        -- 加密与否, 要看服务器的实际情况
复制代码
--=============================================================
1.2.2 联网后,创建联网成功后,对收发数据事件的处理函数
  1. local function sockettest()
  2.    -- 等待联网
  3.    sys.waitUntil("IP_READY")
  4.    -- 时间同步
  5.    socket.sntp()
  6.    -- 开始正在的逻辑, 发起socket链接,等待数据/上报心跳
  7.    local taskName = "sc"
  8.    local topic = taskName .. "_txrx"
  9.    log.info("topic", topic)
  10.    local txqueue = {}
  11.    --[[创建一个任务线程
  12.    @param1     function   任务函数名,用于resume唤醒时调用
  13.    @param2     string     任务名称,用于唤醒任务id
  14.    @param3     function   接收到非目标消息时的回调函数
  15.    @param4     any        任务函数fun的可变参数
  16.    @return     number     返回该任务的线程号
  17.    ]]
  18.    sysplus.taskInitEx(sockettask, taskName, netCB, taskName, txqueue, topic)
  19.    while 1 do
  20.        local result, tp, data = sys.waitUntil(topic, 30000)
  21.        log.info("event", result, tp, data)
  22.        if not result then
  23.            -- 等很久了,没数据上传/下发, 发个日期心跳包吧
  24.            table.insert(txqueue, os.date())
  25.            sys_send(taskName, socket.EVENT, 0)
  26.        elseif tp == "uplink" then
  27.            -- 上行数据, 主动上报的数据,那就发送呀
  28.            table.insert(txqueue, data)
  29.            sys_send(taskName, socket.EVENT, 0)
  30.        elseif tp == "downlink" then
  31.            -- 下行数据,接收的数据, 从ipv6task来的
  32.            -- 其他代码可以通过 sys.publish()
  33.            log.info("socket", "收到下发的数据了", #data,"data:",data)
  34.        end
  35.    end
  36. end
复制代码
1.2.3 联网函数
  1. function sockettask(d1Name, txqueue, rxtopic)
  2.    -- 打印准备连接的服务器信息
  3.    log.info("socket", host, port, is_udp and "UDP" or "TCP", is_tls and "TLS" or "RAW")
  4.    -- 准备好所需要的接收缓冲区
  5.    local rx_buff = zbuff.create(1024)
  6.    local netc = socket.create(nil, d1Name)
  7.    socket.config(netc, nil, is_udp, is_tls)
  8.    log.info("任务id", d1Name)
  9.    while true do
  10.        -- 连接服务器, 15秒超时
  11.        log.info("socket", "开始连接服务器")
  12.        sysplus.cleanMsg(d1Name)
  13.        local result = libnet.connect(d1Name, 15000, netc, host, port)
  14.        if result then
  15.            log.info("socket", "服务器连上了")
  16.            --向服务器发送数据
  17.            libnet.tx(d1Name, 0, netc, "helloworld")
  18.        else
  19.            log.info("socket", "服务器没连上了!!!")
  20.        end
  21.        while result do
  22.            -- 连接成功之后, 先尝试接收
  23.            -- log.info("socket", "调用rx接收数据")
  24.            local succ, param = socket.rx(netc, rx_buff)
  25.            if not succ then
  26.                log.info("服务器断开了", succ, param, ip, port)
  27.                break
  28.            end
  29.            -- 如果服务器有下发数据, used()就必然大于0, 进行处理
  30.            if rx_buff:used() > 0 then
  31.                log.info("socket", "收到服务器数据,长度", rx_buff:used())
  32.                local data = rx_buff:query() -- 获取数据
  33.                sys.publish(rxtopic, "downlink", data)
  34.                rx_buff:del()
  35.            end
  36.            -- log.info("libnet", "调用wait开始等待消息")
  37.            -- 等待事件, 例如: 服务器下发数据, 有数据准备上报, 服务器断开连接
  38.            result, param, param2 = libnet.wait(d1Name, 15000, netc)
  39.            log.info("libnet", "wait", result, param, param2)
  40.            if not result then
  41.                -- 网络异常了, 那就断开了, 执行清理工作
  42.                log.info("socket", "服务器断开了", result, param)
  43.                break
  44.            elseif #txqueue > 0 then
  45.                -- 有待上报的数据,处理之
  46.                while #txqueue > 0 do
  47.                    local data = table.remove(txqueue, 1)
  48.                    if not data then
  49.                        break
  50.                    end
  51.                    result,param = libnet.tx(d1Name, 15000, netc,data)
  52.                    log.info("libnet", "发送数据的结果", result, param)
  53.                    if not result then
  54.                        log.info("socket", "数据发送异常", result, param)
  55.                        break
  56.                    end
  57.                end
  58.            end
  59.            -- 循环尾部, 继续下一轮循环
  60.        end
  61.        -- 能到这里, 要么服务器断开连接, 要么上报(tx)失败, 或者是主动退出
  62.        libnet.close(d1Name, 5000, netc)
  63.        -- log.info(rtos.meminfo("sys"))
  64.        sys.wait(30000) -- 这是重连时长, 自行调整
  65.    end
  66. end
复制代码

2.烧录代码到硬件

2.1 精确连接电脑和4G模组电路板.使用带有数据通信功能的数据线,不要使用仅有充电功能的数据线;

2.2 识别4G模组的boot引脚

在下载之前,要用模组的boot引脚触发下载, 也就是说,要把4G模组的boot引脚拉到 1.8v,或者直接把boot引脚和VDD_EXT引脚相连。我们要在按下BOOT按键时让模块开机,就可以进入下载模式了。
具体到 Air780E开辟板,
2.2.1 当我们模块没开机时,按着BOOT键然后长按PWR开机。
2.2.2 当我们模块开机时,按着BOOT键然后点按重启键即可。


2.3 识别电脑的精确端口

判定是否进入BOOT模式:模块上电,此时在电脑的装备管理器中,检察串口装备, 会出现一个端口表现进入了boot下载模式,如下图所示:


当装备管理器出现了3个连续数字的com端口,并且每个数字都大于4,这时候, 硬件连接上就绪状态,恭喜你,可以举行烧录了!
2.4 新建项目

首先,确保你的 LuaTools 的版本,上大于 2.2.13 版本的。
在 LuaTools 的左上角上有版本显示的,如图所示:


LuaTools 版本没问题的话, 就点击 LuaTOols 右上角的“项目管理测试”按钮,如下图所示:


这时会弹出项目管理和烧录管理的对话框,如下图:
新建一个项目
注意:这里截图使用的hello world项目标烧录教程,烧录的时候要将脚本换本钱次demo的。


2.5 开始烧录

选择780E板子对应的底层core和刚改的main.lua脚本文件。下载到板子中。




点击下载后,我们须要进入boot模式才能正常下载,在(3)(4)末节已经介绍了如何进入boot模式。


3.验证功能

3.1 打开TCP SSL连接测试工具。


3.2 设置端口,tcp连接,是否加密。


3.3 成功连接并发送数据


4.常见问题

4.1 最多同时支持多少个连接?

socket支持多个连接的, 通常最多支持8个。加密连接(TLS/SSL)须要更多内存, 这意味着能容纳的连接数会小许多, 同时也更慢。
4.2 可以与mqtt库同时使用吗?

支持与http/mqtt/websocket/ftp库同时使用, 互不干扰。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

自由的羽毛

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表