北冰洋以北 发表于 2024-12-6 11:49:41

服务器的加密通讯详细操作方法解析

一、编写脚本

1.1 准备资料

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按键时让模块开机,就可以进入下载模式了。
(1)当模块没开机时,按着BOOT键然后长按PWR开机。
(2)当模块开机时,按着BOOT键然后点按重启键即可。

https://img-blog.csdnimg.cn/img_convert/a5f7d1a8f5c8eb841d5349ef92cb64e8.png

2.3 识别电脑正确端口

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

https://img-blog.csdnimg.cn/img_convert/079d24cf260854abd10f5bd658f24bf8.png

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

起首,确保你的 LuaTools 的版本,上大于 2.2.13 版本的。
在 LuaTools 的左上角上有版本显示的,如图所示:
https://img-blog.csdnimg.cn/img_convert/5cf0408471530f686b062b9e6982ad29.png

LuaTools 版本没标题标话, 就点击 LuaTOols 右上角的“项目管理测试”按钮,如下图所示:
https://img-blog.csdnimg.cn/img_convert/80bbf63be51db1127715fdcef648f295.png

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

https://img-blog.csdnimg.cn/img_convert/e32c023591613f24276c392dda8c6fab.png

2.5 烧录

选择780E板子对应的底层core和刚改的main.lua脚本文件。下载到板子中。
https://img-blog.csdnimg.cn/img_convert/eeb57e24283b117f6657718d04322dc7.png

https://img-blog.csdnimg.cn/img_convert/79189b2fa6f8dd04da67042ba2fc004f.png

点击下载后,我们需要进入boot模式才气正常下载,在(3)(4)末节已经先容了如何进入boot模式。
https://img-blog.csdnimg.cn/img_convert/da65bc0607ae698d7ba0bfad0090a761.png

三、验证功能

3.1 打开TCPSSL,毗连测试工具。

https://img-blog.csdnimg.cn/img_convert/871c744330ba714a93907d2bbcb7498c.png

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


https://img-blog.csdnimg.cn/img_convert/846b5f0ad78b2fe4da2ec108d2d04e4c.png

3.3 成功毗连,发送数据

https://img-blog.csdnimg.cn/img_convert/a66afb75b1d240012c33d3b26ea54353.png

四、常见标题解答

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

支持。
4.2 最多同时支持多少个毗连?

socket支持多个毗连的, 通常最多支持8个。
加密毗连(TLS/SSL)需要更多内存, 这意味着能容纳的毗连数会小很多, 同时也更慢。
以上就是本日的全部内容,合宙低功耗4G模组Air780E快速入门之跟服务器之间的加密通讯,你学会了吗?

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: 服务器的加密通讯详细操作方法解析