今天我们来学习合宙低功耗4G模组Air780E快速入门之跟服务器之间的加密通信,伙伴们,一起学起来!

一、编写脚本

1.1 准备资料

Air780E开发板购买

Air780E开发板设计资料

LuatOS-Air780E/网络加密通信程序源码demo

合宙的 TCP/UDP 测试服务器

API介绍说明

1.2 程序详解

1.2.1 首先配置联网配置

-- 测试网站 https://netlab.luatos.com/ 点击 打开TCP 获取测试端口号

-- 要按实际情况修改

local host = "112.125.89.8" -- 服务器ip或者域名, 都可以的

local port = 45186 -- 服务器端口

local is_udp = false -- 如果是UDP, 要改成true, false就是TCP

local is_tls = true -- 加密与否, 要看服务器的实际情况

--=============================================================

1.2.2 联网后,创建联网成功后,对收发数据事件的处理函数

local function sockettest()

-- 等待联网

sys.waitUntil("IP_READY")

-- 时间同步

socket.sntp()

-- 开始正在的逻辑, 发起socket链接,等待数据/上报心跳

local taskName = "sc"

local topic = taskName .. "_txrx"

log.info("topic", topic)

local txqueue = {}

--[[创建一个任务线程

@param1 function 任务函数名,用于resume唤醒时调用

@param2 string 任务名称,用于唤醒任务id

@param3 function 接收到非目标消息时的回调函数

@param4 any 任务函数fun的可变参数

@return number 返回该任务的线程号

]]

sysplus.taskInitEx(sockettask, taskName, netCB, taskName, txqueue, topic)

while 1 do

local result, tp, data = sys.waitUntil(topic, 30000)

log.info("event", result, tp, data)

if not result then
   -- 等很久了,没数据上传/下发, 发个日期心跳包吧

   table.insert(txqueue, os.date())

   sys_send(taskName, socket.EVENT, 0)

elseif tp == "uplink" then

   -- 上行数据, 主动上报的数据,那就发送呀

   table.insert(txqueue, data)

   sys_send(taskName, socket.EVENT, 0)

elseif tp == "downlink" then

   -- 下行数据,接收的数据, 从ipv6task来的

   -- 其他代码可以通过 sys.publish()

   log.info("socket", "收到下发的数据了", #data,"data:",data)

end

end

end

1.2.3 联网函数

function sockettask(d1Name, txqueue, rxtopic)

-- 打印准备连接的服务器信息

log.info("socket", host, port, is_udp and "UDP" or "TCP", is_tls and "TLS" or "RAW")

-- 准备好所需要的接收缓冲区

local rx_buff = zbuff.create(1024)

local netc = socket.create(nil, d1Name)

socket.config(netc, nil, is_udp, is_tls)

log.info("任务id", d1Name)

while true do

-- 连接服务器, 15秒超时

log.info("socket", "开始连接服务器")

sysplus.cleanMsg(d1Name)

local result = libnet.connect(d1Name, 15000, netc, host, port)

if result then
   log.info("socket", "服务器连上了")

   --向服务器发送数据

   libnet.tx(d1Name, 0, netc, "helloworld")

else

   log.info("socket", "服务器没连上了!!!")

end

while result do

   -- 连接成功之后, 先尝试接收

   -- log.info("socket", "调用rx接收数据")

   local succ, param = socket.rx(netc, rx_buff)

   if not succ then

       log.info("服务器断开了", succ, param, ip, port)

       break

   end

   -- 如果服务器有下发数据, used()就必然大于0, 进行处理

   if rx_buff:used() > 0 then

       log.info("socket", "收到服务器数据,长度", rx_buff:used())

       local data = rx_buff:query() -- 获取数据

       sys.publish(rxtopic, "downlink", data)

       rx_buff:del()

   end

   -- log.info("libnet", "调用wait开始等待消息")

   -- 等待事件, 例如: 服务器下发数据, 有数据准备上报, 服务器断开连接

   result, param, param2 = libnet.wait(d1Name, 15000, netc)

   log.info("libnet", "wait", result, param, param2)

   if not result then

       -- 网络异常了, 那就断开了, 执行清理工作

       log.info("socket", "服务器断开了", result, param)

       break

   elseif #txqueue > 0 then

       -- 有待上报的数据,处理之

       while #txqueue > 0 do

           local data = table.remove(txqueue, 1)

           if not data then

               break

           end

           result,param = libnet.tx(d1Name, 15000, netc,data)

           log.info("libnet", "发送数据的结果", result, param)

           if not result then

               log.info("socket", "数据发送异常", result, param)

               break

           end

       end

   end

   -- 循环尾部, 继续下一轮循环

end

-- 能到这里, 要么服务器断开连接, 要么上报(tx)失败, 或者是主动退出

libnet.close(d1Name, 5000, netc)

-- log.info(rtos.meminfo("sys")) sys.wait(30000) -- 这是重连时长, 自行调整

end

end

二、烧录代码到硬件

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.1 打开TCP SSL连接测试工具。

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

3.3 成功连接并发送数据

四、常见问题

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

socket支持多个连接的, 通常最多支持8个。加密连接(TLS/SSL)需要更多内存, 这意味着能容纳的连接数会小很多, 同时也更慢。

4.2 可以与mqtt库同时使用吗?

支持。

以上就是今天的全部内容,合宙低功耗4G模组Air780E快速入门之跟服务器之间的加密通信,你学会了吗?

关于Air780E:与服务器的加密通信操作方法的更多相关文章

  1. Security基础(三):OpenSSL及证书服务、邮件TLS/SSL加密通信

    一.OpenSSL及证书服务 目标: 本案例要求熟悉OpenSSL工具的基本使用,完成以下任务操作: 使用OpenSSL加密/解密文件 搭建企业自有的CA服务器,为颁发数字证书提供基础环境 方案: 使 ...

  2. 单片机上使用TEA加密通信(转)

    源:单片机上使用TEA加密通信 本文博客链接:http://blog.csdn.net/jdh99,作者:jdh,转载请注明. 环境: 主机:WIN7 开发环境:MDK4.72 单片机:STM32 说 ...

  3. 如何使用HTML5的WebSocket实现网页与服务器的双工通信(一)

    本系列服务端双工通信包括两种实现方式:一.使用Socket构建:二.使用WCF构建.本文为使用Socket构建服务端的双工通信,客户端同样使用Html5的WebSocket技术进行调用. 一.网页客户 ...

  4. C#调用接口注意要点 socket,模拟服务器、客户端通信 在ASP.NET Core中构建路由的5种方法

    C#调用接口注意要点   在用C#调用接口的时候,遇到需要通过调用登录接口才能调用其他的接口,因为在其他的接口需要在登录的状态下保存Cookie值才能有权限调用, 所以首先需要通过调用登录接口来保存c ...

  5. SSL及其加密通信过程

    SSL及其加密通信过程 什么是SSL SSL英文全称Secure Socket Layer,安全套接层,是一种为网络通信提供安全以及数据完整性的安全协议,它在传输层对网络进行加密.它主要是分为两层: ...

  6. Python3+ssl实现加密通信

    一.说明 1. python标准库ssl可实现加密通信 2. ssl库底层使用openssl,做了面向对像化改造和简化,但还是可以明显看出openssl的痕迹 3. 本文先给出python实现的soc ...

  7. 转: https 加密通信流程

    https 加密通信流程当用户在浏览器中输入一个以https开头的网址时,便开启了浏览器与被访问站点之间的加密通信.下面我们以一个用户访问https://qbox.me为例,给读者展现一下SSL/TL ...

  8. Filebeat与Logstash配置SSL加密通信

    为了保证应用日志数据的传输安全,我们可以使用SSL相互身份验证来保护Filebeat和Logstash之间的连接. 这可以确保Filebeat仅将加密数据发送到受信任的Logstash服务器,并确保L ...

  9. 开源项目SMSS发开指南(四)——SSL/TLS加密通信详解

    本文将详细介绍如何在Java端.C++端和NodeJs端实现基于SSL/TLS的加密通信,重点分析Java端利用SocketChannel和SSLEngine从握手到数据发送/接收的完整过程.本文也涵 ...

  10. bugzilla4的xmlrpc接口api调用实现分享: xmlrpc + https + cookies + httpclient +bugzilla + java实现加密通信下的xmlrpc接口调用并解决登陆保持会话功能

    xmlrpc .  https . cookies . httpclient.bugzilla . java实现加密通信下的xmlrpc接口调用并解决登陆保持会话功能,网上针对bugzilla的实现很 ...

随机推荐

  1. 处理报错 ResizeObserver loop completed with undelivered notifications.

    // 处理报错 ResizeObserver loop completed with undelivered notifications. export const handlerResizeObse ...

  2. JavaScript设计模式样例十一 —— 外观模式

    外观模式(Facade Pattern) 定义:隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口. 目的:为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得 ...

  3. 分库分表后全局唯一ID的四种生成策略对比

    分库分表之后,ID主键如何处理? 当业务量大的时候,数据库中数据量过大,就要进行分库分表了,那么分库分表之后,必然将面临一个问题,那就是ID怎么生成?因为要分成多个表之后,如果还是使用每个表的自增长I ...

  4. C++17: 用折叠表达式实现一个IsAllTrue函数

    前言 让我们实现一个 IsAllTrue 函数,支持变长参数,可传入多个表达式,必须全部计算为true,该函数才返回true. 本文记录了逐步实现与优化该函数的思维链,用到了以下现代C++新特性知识, ...

  5. vue源码解析-实现一个基础的MVVM框架

    基本介绍 vue.js采用数据劫持结合发布-订阅模式的方式,通过Object.defineProperty()来劫持各个属性的getter,setter,在数据变动时发布消息给订阅者,触发响应的监听回 ...

  6. 扫描全能王启动鸿蒙原生应用开发,系HarmonyOS NEXT智能扫描领域首批

    近期,"鸿蒙合作签约暨扫描全能王鸿蒙原生应用开发启动仪式"(简称"签约仪式")正式举行.合合信息与华为达成鸿蒙合作,旗下扫描全能王将基于HarmonyOS NE ...

  7. BOOST 定时器 stop探究

    Asio是一个建立在Boost所提供的相关组件之上的异步的网络库,可以运行在Win/Linux/Unix等各种平台之上. 不过随着C++11的发布,其对Boost的依赖也越来越少,作者又做了一个不依赖 ...

  8. MoNA:复用跨模态预训练模型,少样本模态的福音 | ICML'24

    跨模态转移旨在利用大型预训练模型来完成可能不属于预训练数据模态的任务.现有的研究在将经典微调扩展到跨模态场景方面取得了一定的成功,但仍然缺乏对模态差距对转移的影响的理解.在这项工作中,进行了一系列关于 ...

  9. Readme3.0 Final

    Download Using 解压后放于不明显的地方 打开Devc++,点击 工具 > 编译选项 > 目录,在 C包含文件 与 C++包含文件 中复制完整路径并添加 选中刚添加的路径后,点 ...

  10. 浏览器中生成 OSS 令牌 | Web Crypto API

    笔者写文章的时候,都会把图片通过自己搭建的一个简单站点 https://imgbed.sugarat.top/ 把图片上传到各种云的对象存储服务(OSS)上. 然后通过CDN访问,保证图片有可靠的访问 ...