易语言TCP服务端接收刷卡数据并向客户端读卡器发送指令

本示例适配的设备:https://item.taobao.com/item.htm?spm=a21dvs.23580594.0.0.47b32c1bmEakv9&ft=t&id=22173428704

javascript 复制代码
.版本 2

.程序集 窗口程序集_启动窗口

.子程序 _TCP服务器_数据到达
.局部变量 接收到的字节集, 字节集
.局部变量 数据报文, 文本型
.局部变量 客户IP端口, 文本型
.局部变量 系统时间, 日期时间型
.局部变量 回应指令数据, 字节型, , "200"
.局部变量 发送的字节集, 字节集

.如果 (服务线程 = 真)
    接收到的字节集 = TCP服务器.取回数据 ()
    客户IP端口 = TCP服务器.取回客户 ()
    更新客户框列表 (客户IP端口)
    数据报文 = 字节集转十六进制文本 (接收到的字节集)

    .如果 (列表框_报文.取项目数 () > 30)
        列表框_报文.清空 ()
    .否则

    .如果结束
    列表框_报文.加入项目 (取系统时间 () + " " + 取文本左边 (客户IP端口 + "              ", 22) + "接收数据:" + 数据报文, )

    解析处理接收数据 (客户IP端口, 接收到的字节集)

.否则

.如果结束


.子程序 十六进制转十进制, 整数型
.参数 十六进制, 文本型
.局部变量 i, 整数型
.局部变量 十进制, 整数型

.计次循环首 (取文本长度 (十六进制), i)
    十进制 = 十进制 × 16 + 寻找文本 ("0123456789ABCDEF", 取文本中间 (到大写 (十六进制), i, 1), , 假) - 1
.计次循环尾 ()
返回 (十进制)



.子程序 字节集转十六进制文本, 文本型
.参数 字节集, 字节集
.局部变量 i, 整数型
.局部变量 结果, 文本型
.局部变量 计次, 整数型

结果 = ""
计次 = 取字节集长度 (字节集)
.计次循环首 (计次, i)
    .如果 (字节集 [i] < 16)
        结果 = 结果 + "0" + 取十六进制文本 (字节集 [i]) + " "
    .否则
        结果 = 结果 + 取十六进制文本 (字节集 [i]) + " "
    .如果结束

.计次循环尾 ()
返回 (结果)



.子程序 取系统时间, 文本型
.局部变量 当前时间, 日期时间型
.局部变量 结果, 文本型

当前时间 = 取现行时间 ()
结果 = 取文本右边 ("0" + 到文本 (取小时 (当前时间)), 2) + ":" + 取文本右边 ("0" + 到文本 (取分钟 (当前时间)), 2) + ":" + 取文本右边 ("0" + 到文本 (取秒 (当前时间)), 2)
返回 (结果)

.子程序 _按钮_启动TCP服务器_被单击
.局部变量 通讯端口, 整数型


.如果 (按钮_启动TCP服务器.标题 = "启动TCP服务器")
    通讯端口 = 到整数 (编辑框_通讯端口.内容)
    TCP服务器.端口 = 通讯端口
    TCP服务器.激活 ()
    按钮_启动TCP服务器.标题 = "停止"
    服务线程 = 真

.否则
    按钮_启动TCP服务器.标题 = "启动TCP服务器"
    服务线程 = 假
    列表框_客户端.清空 ()
.如果结束


.子程序 __启动窗口_创建完毕



.子程序 更新客户框列表
.参数 客户端IP, 文本型
.局部变量 已存在, 逻辑型
.局部变量 i, 整数型
.局部变量 项目数, 整数型

已存在 = 假
项目数 = 列表框_客户端.取项目数 ()
.如果 (项目数 > 0)
    .计次循环首 (项目数, i)
        .如果 (列表框_客户端.取项目文本 (i - 1) = 客户端IP)
            已存在 = 真
        .否则

        .如果结束

    .计次循环尾 ()
.否则

.如果结束
.如果 (已存在 = 假)
    列表框_客户端.加入项目 (客户端IP, )
.否则

.如果结束



.子程序 解析处理接收数据
.参数 客户IP端口, 文本型
.参数 接收到的字节集, 字节集
.局部变量 数据长度, 整数型
.局部变量 设备IP, 文本型
.局部变量 机号, 整数型
.局部变量 数据包序号, 整数型
.局部变量 卡号长度, 整数型
.局部变量 物理卡号, 文本型
.局部变量 唯一设备序号, 文本型
.局部变量 解析结果, 文本型
.局部变量 i, 整数型
.局部变量 随机动态码, 文本型

数据长度 = 取字节集长度 (接收到的字节集)
.如果 (数据长度 > 10 且 (接收到的字节集 [1] = 十六进制 ("C1") 或 接收到的字节集 [1] = 十六进制 ("CF")))  ' 接收到IC读卡器数据
    .如果 (接收到的字节集 [1] = 十六进制 ("C1"))
        解析结果 = "接收数据解析:IC读卡器刷卡数据,设备IP["
    .否则
        解析结果 = "接收数据解析:IC卡离开读卡器,设备IP["
    .如果结束
    设备IP = 到文本 (接收到的字节集 [2]) + "." + 到文本 (接收到的字节集 [3]) + "." + 到文本 (接收到的字节集 [4]) + "." + 到文本 (接收到的字节集 [5])
    机号 = 接收到的字节集 [6] + 接收到的字节集 [7] × 256
    数据包序号 = 接收到的字节集 [8] + 接收到的字节集 [9] × 256
    卡号长度 = 接收到的字节集 [10]
    .计次循环首 (卡号长度, i)
        物理卡号 = 物理卡号 + 取文本右边 ("0" + 取十六进制文本 (接收到的字节集 [10 + i]), 2)
    .计次循环尾 ()
    i = 10 + i
    .判断循环首 (i < 数据长度)
        唯一设备序号 = 唯一设备序号 + 取文本右边 ("0" + 取十六进制文本 (接收到的字节集 [i]), 2)
        i = i + 1
    .判断循环尾 ()
    唯一设备序号 = 唯一设备序号 + 取文本右边 ("0" + 取十六进制文本 (接收到的字节集 [i]), 2)

    解析结果 = 解析结果 + 设备IP + "],机号[" + 到文本 (机号) + "],数据包序号[" + 到文本 (数据包序号) + "],卡号长度[" + 到文本 (卡号长度) + "],物理卡号HEX[" + 物理卡号 + "],唯一设备序号[" + 唯一设备序号 + "]"
    列表框_报文.加入项目 (解析结果, )
    列表框_报文.加入项目 ("", )
    接收到刷卡数据回应 (客户IP端口, 机号)

.否则
    .如果 (数据长度 > 10 且 (接收到的字节集 [1] = 十六进制 ("D1") 或 接收到的字节集 [1] = 十六进制 ("DF")))  ' 接收到ID读卡器数据
        .如果 (接收到的字节集 [1] = 十六进制 ("D1"))
            解析结果 = "接收数据解析:ID读卡器刷卡数据,设备IP["
            解析结果 = "接收数据解析:ID卡离开读卡器,设备IP["
        .否则

        .如果结束
        设备IP = 到文本 (接收到的字节集 [2]) + "." + 到文本 (接收到的字节集 [3]) + "." + 到文本 (接收到的字节集 [4]) + "." + 到文本 (接收到的字节集 [5])
        机号 = 接收到的字节集 [6] + 接收到的字节集 [7] × 256
        数据包序号 = 接收到的字节集 [8] + 接收到的字节集 [9] × 256
        .计次循环首 (5, i)
            物理卡号 = 物理卡号 + 取文本右边 ("0" + 取十六进制文本 (接收到的字节集 [10 + i]), 2)
        .计次循环尾 ()
        i = 15
        .判断循环首 (i < 数据长度)
            唯一设备序号 = 唯一设备序号 + 取文本右边 ("0" + 取十六进制文本 (接收到的字节集 [i]), 2)
            i = i + 1
        .判断循环尾 ()
        唯一设备序号 = 唯一设备序号 + 取文本右边 ("0" + 取十六进制文本 (接收到的字节集 [i]), 2)

        解析结果 = 解析结果 + 设备IP + "],机号[" + 到文本 (机号) + "],数据包序号[" + 到文本 (数据包序号) + "],物理卡号HEX[" + 物理卡号 + "],唯一设备序号[" + 唯一设备序号 + "]"
        列表框_报文.加入项目 (解析结果, )
        列表框_报文.加入项目 ("", )
        接收到刷卡数据回应 (客户IP端口, 机号)

    .否则
        .如果 (数据长度 > 10 且 接收到的字节集 [1] = 十六进制 ("F3"))  ' 接收到
            设备IP = 到文本 (接收到的字节集 [2]) + "." + 到文本 (接收到的字节集 [3]) + "." + 到文本 (接收到的字节集 [4]) + "." + 到文本 (接收到的字节集 [5])
            机号 = 接收到的字节集 [6] + 接收到的字节集 [7] × 256
            数据包序号 = 接收到的字节集 [8] + 接收到的字节集 [9] × 256
            解析结果 = "接收数据解析:设备心跳数据包," + 设备IP + "],机号[" + 到文本 (机号) + "],数据包序号[" + 到文本 (数据包序号) + "],心跳包类型[" + 到文本 (接收到的字节集 [10]) + "]"
            解析结果 = 解析结果 + ",长度[" + 到文本 (接收到的字节集 [11]) + "]"
            解析结果 = 解析结果 + ",继电器状态[" + 到文本 (接收到的字节集 [12]) + "]"
            解析结果 = 解析结果 + ",外部输入状态[" + 到文本 (接收到的字节集 [13]) + "]"
            .计次循环首 (4, i)
                随机动态码 = 随机动态码 + 取文本右边 ("0" + 取十六进制文本 (接收到的字节集 [13 + i]), 2)
            .计次循环尾 ()
            解析结果 = 解析结果 + ",随机动态码[" + 随机动态码 + "]"
            i = 18
            .判断循环首 (i ≤ 数据长度)
                唯一设备序号 = 唯一设备序号 + 取文本右边 ("0" + 取十六进制文本 (接收到的字节集 [i]), 2)
                i = i + 1
            .判断循环尾 ()
            解析结果 = 解析结果 + ",唯一设备序号[" + 唯一设备序号 + "]"
            列表框_报文.加入项目 (解析结果, )
            列表框_报文.加入项目 ("", )

        .否则

        .如果结束

    .如果结束

.如果结束




.子程序 接收到刷卡数据回应
.参数 客户IP端口, 文本型
.参数 机号, 整数型

.如果 (选择框_回应.选中)
    .如果 (单选框_蜂鸣.选中)
        驱动设备蜂鸣响声 (客户IP端口, 机号)
    .否则
        .如果 (单选框_继电器.选中)
            驱动设备开继电器 (客户IP端口, 机号)
        .否则
            .如果 (单选框_显示和蜂鸣.选中)
                驱动设备显示和蜂鸣 (客户IP端口, 机号)
            .否则
                .如果 (单选框_显示蜂鸣语音.选中)
                    驱动设备显示文字播报语音 (客户IP端口, 机号)
                .否则

                .如果结束

            .如果结束

        .如果结束

    .如果结束

.否则

.如果结束



.子程序 _按钮_驱动蜂鸣响声_被单击
.局部变量 客户IP端口, 文本型

客户IP端口 = 列表框_客户端.取项目文本 (列表框_客户端.现行选中项)
.如果 (客户IP端口 = "")
    信息框 ("请在客户端列表中选择要发送指令的客户IP!", 0, "提示", )

.否则
    驱动设备蜂鸣响声 (客户IP端口, 0)  ' 0表示任意机号
.如果结束


.子程序 驱动设备蜂鸣响声
.参数 客户IP端口, 文本型
.参数 机号, 整数型
.局部变量 指令缓冲, 字节型, , "4"

指令缓冲 [1] = 十六进制 ("96")  ' 驱动读卡器蜂鸣响声的指令码
指令缓冲 [2] = 机号 % 256  ' 读卡器机号低位
指令缓冲 [3] = 机号 \ 256  ' 读卡器机号高位
指令缓冲 [4] = 组合框_蜂鸣声.现行选中项  ' 蜂鸣器响声代码

TCP服务器.发送数据 (客户IP端口, 到字节集 (指令缓冲), )
列表框_报文.加入项目 (取系统时间 () + " " + 取文本左边 (客户IP端口 + "              ", 22) + "发送数据:" + 字节集转十六进制文本 (到字节集 (指令缓冲)), )
列表框_报文.加入项目 ("发送数据说明:驱动设备蜂鸣响声。", )
列表框_报文.加入项目 ("", )


.子程序 驱动设备开继电器
.参数 客户IP端口, 文本型
.参数 机号, 整数型
.局部变量 指令缓冲, 字节型, , "6"
.局部变量 继电器延时, 整数型

指令缓冲 [1] = 十六进制 ("78")  ' 驱动读卡器开启继电器的指令码
指令缓冲 [2] = 机号 % 256  ' 读卡器机号低位
指令缓冲 [3] = 机号 \ 256  ' 读卡器机号高位
.如果 (组合框_继电器.现行选中项 = 1)
    指令缓冲 [4] = 十六进制 ("F1")
.否则
    .如果 (组合框_继电器.现行选中项 = 2)
        指令缓冲 [4] = 十六进制 ("F2")
    .否则
        .如果 (组合框_继电器.现行选中项 = 3)
            指令缓冲 [4] = 十六进制 ("F3")
        .否则
            .如果 (组合框_继电器.现行选中项 = 4)
                指令缓冲 [4] = 十六进制 ("F4")
            .否则
                .如果 (组合框_继电器.现行选中项 = 5)
                    指令缓冲 [4] = 十六进制 ("F5")
                .否则
                    .如果 (组合框_继电器.现行选中项 = 6)
                        指令缓冲 [4] = 十六进制 ("F6")
                    .否则
                        .如果 (组合框_继电器.现行选中项 = 7)
                            指令缓冲 [4] = 十六进制 ("F7")
                        .否则
                            .如果 (组合框_继电器.现行选中项 = 8)
                                指令缓冲 [4] = 十六进制 ("F8")
                            .否则

                            .如果结束
                            指令缓冲 [4] = 十六进制 ("F0")
                        .如果结束

                    .如果结束

                .如果结束

            .如果结束

        .如果结束

    .如果结束

.如果结束

继电器延时 = 到整数 (编辑框_继电器.内容)
指令缓冲 [5] = 继电器延时 % 256
指令缓冲 [6] = 继电器延时 \ 256

TCP服务器.发送数据 (客户IP端口, 到字节集 (指令缓冲), )
列表框_报文.加入项目 (取系统时间 () + " " + 取文本左边 (客户IP端口 + "              ", 22) + "发送数据:" + 字节集转十六进制文本 (到字节集 (指令缓冲)), )
列表框_报文.加入项目 ("发送数据说明:驱动设备开启继电器。", )
列表框_报文.加入项目 ("", )

.子程序 _按钮_开继电器_被单击
.局部变量 客户IP端口, 文本型

客户IP端口 = 列表框_客户端.取项目文本 (列表框_客户端.现行选中项)
.如果 (客户IP端口 = "")
    信息框 ("请在客户端列表中选择要发送指令的客户IP!", 0, "提示", )

.否则
    驱动设备开继电器 (客户IP端口, 0)  ' 0表示任意机号
.如果结束



.子程序 驱动设备关继电器
.参数 客户IP端口, 文本型
.参数 机号, 整数型
.局部变量 指令缓冲, 字节型, , "6"
.局部变量 继电器延时, 整数型

指令缓冲 [1] = 十六进制 ("78")  ' 驱动读卡器开启继电器的指令码
指令缓冲 [2] = 机号 % 256  ' 读卡器机号低位
指令缓冲 [3] = 机号 \ 256  ' 读卡器机号高位
.如果 (组合框_继电器.现行选中项 = 1)
    指令缓冲 [4] = 十六进制 ("E1")
.否则
    .如果 (组合框_继电器.现行选中项 = 2)
        指令缓冲 [4] = 十六进制 ("E2")
    .否则
        .如果 (组合框_继电器.现行选中项 = 3)
            指令缓冲 [4] = 十六进制 ("E3")
        .否则
            .如果 (组合框_继电器.现行选中项 = 4)
                指令缓冲 [4] = 十六进制 ("E4")
            .否则
                .如果 (组合框_继电器.现行选中项 = 5)
                    指令缓冲 [4] = 十六进制 ("E5")
                .否则
                    .如果 (组合框_继电器.现行选中项 = 6)
                        指令缓冲 [4] = 十六进制 ("E6")
                    .否则
                        .如果 (组合框_继电器.现行选中项 = 7)
                            指令缓冲 [4] = 十六进制 ("E7")
                        .否则
                            .如果 (组合框_继电器.现行选中项 = 8)
                                指令缓冲 [4] = 十六进制 ("E8")
                            .否则

                            .如果结束
                            指令缓冲 [4] = 十六进制 ("E0")
                        .如果结束

                    .如果结束

                .如果结束

            .如果结束

        .如果结束

    .如果结束

.如果结束

继电器延时 = 到整数 (编辑框_继电器.内容)
指令缓冲 [5] = 继电器延时 % 256
指令缓冲 [6] = 继电器延时 \ 256

TCP服务器.发送数据 (客户IP端口, 到字节集 (指令缓冲), )
列表框_报文.加入项目 (取系统时间 () + " " + 取文本左边 (客户IP端口 + "              ", 22) + "发送数据:" + 字节集转十六进制文本 (到字节集 (指令缓冲)), )
列表框_报文.加入项目 ("发送数据说明:驱动设备关闭继电器。", )
列表框_报文.加入项目 ("", )



.子程序 驱动设备显示和蜂鸣
.参数 客户IP端口, 文本型
.参数 机号, 整数型
.局部变量 指令缓冲, 字节型, , "5"
.局部变量 显示字节集, 字节集

指令缓冲 [1] = 十六进制 ("5A")  ' 驱动读卡器显示文字和蜂鸣响声指令码
指令缓冲 [2] = 机号 % 256  ' 读卡器机号低位
指令缓冲 [3] = 机号 \ 256  ' 读卡器机号高位

.如果 (选择框_响声.选中)
    指令缓冲 [4] = 组合框_蜂鸣声.现行选中项  ' 蜂鸣器响声代码
    .如果 (单选框_背光不变.选中)
        指令缓冲 [4] = 位或 (指令缓冲 [4], 128)
    .否则

    .如果结束

.否则
    指令缓冲 [4] = 十六进制 ("FF")  ' 不蜂鸣响声
    .如果 (单选框_背光不变.选中)
        指令缓冲 [4] = 位或 (指令缓冲 [4], 127)
    .否则

    .如果结束

.如果结束

指令缓冲 [5] = 到字节 (编辑框_显示延时.内容)  ' 显示延时,255表示永久显示

显示字节集 = 取字节集左边 (到字节集 (编辑框_显示文字.内容 + "                                  "), 34)  ' 后面加上空格并取34长度,表示本次满屏显示

TCP服务器.发送数据 (客户IP端口, 到字节集 (指令缓冲) + 显示字节集, )
列表框_报文.加入项目 (取系统时间 () + " " + 取文本左边 (客户IP端口 + "              ", 22) + "发送数据:" + 字节集转十六进制文本 (到字节集 (指令缓冲) + 显示字节集), )
列表框_报文.加入项目 ("发送数据说明:驱动设备显示文字+蜂鸣响声。", )
列表框_报文.加入项目 ("", )


.子程序 _按钮_显示和蜂鸣_被单击
.局部变量 客户IP端口, 文本型

客户IP端口 = 列表框_客户端.取项目文本 (列表框_客户端.现行选中项)
.如果 (客户IP端口 = "")
    信息框 ("请在客户端列表中选择要发送指令的客户IP!", 0, "提示", )

.否则
    驱动设备显示和蜂鸣 (客户IP端口, 0)  ' 0表示任意机号
.如果结束



.子程序 _按钮_关继电器_被单击
.局部变量 客户IP端口, 文本型

客户IP端口 = 列表框_客户端.取项目文本 (列表框_客户端.现行选中项)
.如果 (客户IP端口 = "")
    信息框 ("请在客户端列表中选择要发送指令的客户IP!", 0, "提示", )

.否则
    驱动设备关继电器 (客户IP端口, 0)  ' 0表示任意机号
.如果结束


.子程序 _按钮_显示蜂鸣语音_被单击
.局部变量 客户IP端口, 文本型

客户IP端口 = 列表框_客户端.取项目文本 (列表框_客户端.现行选中项)
.如果 (客户IP端口 = "")
    信息框 ("请在客户端列表中选择要发送指令的客户IP!", 0, "提示", )

.否则
    驱动设备显示文字播报语音 (客户IP端口, 0)  ' 0表示任意机号
.如果结束




.子程序 驱动设备显示文字播报语音
.参数 客户IP端口, 文本型
.参数 机号, 整数型
.局部变量 指令缓冲, 字节型, , "11"
.局部变量 显示字节集, 字节集
.局部变量 语音字节集, 字节集
.局部变量 后缀缓冲, 字节型, , "4"
.局部变量 继电器延时, 整数型

显示字节集 = 取字节集左边 (到字节集 (编辑框_显示文字.内容 + "                                  "), 34)  ' 后面加上空格并取34长度,表示本次满屏显示

语音字节集 = 到字节集 ("[v" + 删首尾空 (编辑框_音量.内容) + "]" + 删首尾空 (编辑框_TTS语音.内容))

指令缓冲 [1] = 十六进制 ("5C")  ' 驱动读卡器显示文字播报TTS语音和蜂鸣响声指令码
指令缓冲 [2] = 机号 % 256  ' 读卡器机号低位
指令缓冲 [3] = 机号 \ 256  ' 读卡器机号高位

.如果 (选择框_响声.选中)
    指令缓冲 [4] = 组合框_蜂鸣声.现行选中项  ' 蜂鸣器响声代码
    .如果 (单选框_背光不变.选中)
        指令缓冲 [4] = 位或 (指令缓冲 [4], 128)
    .否则

    .如果结束

.否则
    指令缓冲 [4] = 十六进制 ("FF")  ' 不蜂鸣响声
    .如果 (单选框_背光不变.选中)
        指令缓冲 [4] = 位或 (指令缓冲 [4], 127)
    .否则

    .如果结束

.如果结束

.如果 (组合框_继电器.现行选中项 = 1)
    指令缓冲 [5] = 十六进制 ("F1")
.否则
    .如果 (组合框_继电器.现行选中项 = 2)
        指令缓冲 [5] = 十六进制 ("F2")
    .否则
        .如果 (组合框_继电器.现行选中项 = 3)
            指令缓冲 [5] = 十六进制 ("F3")
        .否则
            .如果 (组合框_继电器.现行选中项 = 4)
                指令缓冲 [5] = 十六进制 ("F4")
            .否则
                .如果 (组合框_继电器.现行选中项 = 5)
                    指令缓冲 [5] = 十六进制 ("F5")
                .否则
                    .如果 (组合框_继电器.现行选中项 = 6)
                        指令缓冲 [5] = 十六进制 ("F6")
                    .否则
                        .如果 (组合框_继电器.现行选中项 = 7)
                            指令缓冲 [5] = 十六进制 ("F7")
                        .否则
                            .如果 (组合框_继电器.现行选中项 = 8)
                                指令缓冲 [5] = 十六进制 ("F8")
                            .否则

                            .如果结束
                            指令缓冲 [5] = 十六进制 ("F0")
                        .如果结束

                    .如果结束

                .如果结束

            .如果结束

        .如果结束

    .如果结束

.如果结束

继电器延时 = 到整数 (编辑框_继电器.内容)
指令缓冲 [6] = 继电器延时 % 256
指令缓冲 [7] = 继电器延时 \ 256

指令缓冲 [8] = 到字节 (编辑框_显示延时.内容)  ' 显示保留时间,单位为秒,为255时表示永久显示

指令缓冲 [9] = 0  ' 在显示屏中的哪个位置开始显示
指令缓冲 [10] = 34  ' 显示字符串长度 0-34为全屏
指令缓冲 [11] = 取字节集长度 (语音字节集)  ' 语音长度,最长可以126

后缀缓冲 [1] = 十六进制 ("55")  ' 4字节固定的后缀
后缀缓冲 [2] = 十六进制 ("AA")
后缀缓冲 [3] = 十六进制 ("66")
后缀缓冲 [4] = 十六进制 ("99")

TCP服务器.发送数据 (客户IP端口, 到字节集 (指令缓冲) + 显示字节集 + 语音字节集 + 到字节集 (后缀缓冲), )
列表框_报文.加入项目 (取系统时间 () + " " + 取文本左边 (客户IP端口 + "              ", 22) + "发送数据:" + 字节集转十六进制文本 (到字节集 (指令缓冲) + 显示字节集 + 语音字节集 + 到字节集 (后缀缓冲)), )
列表框_报文.加入项目 ("发送数据说明:驱动设备显示文字、播报语音、开启继电器、蜂鸣响声。", )
列表框_报文.加入项目 ("", )
相关推荐
Fᴏʀ ʏ꯭ᴏ꯭ᴜ꯭.2 小时前
Keepalived VIP迁移邮件告警配置指南
运维·服务器·笔记
酣大智3 小时前
接口模式参数
运维·网络·网络协议·tcp/ip
Genie cloud3 小时前
1Panel SSL证书申请完整教程
服务器·网络协议·云计算·ssl
!chen3 小时前
linux服务器静默安装Oracle26ai
linux·运维·服务器
莫大3303 小时前
2核2G云服务器PHP8.5+MySQL9.0+Nginx(LNMP)安装WordPress网站详细教程
运维·服务器·nginx
2501_927773074 小时前
imx6驱动
linux·运维·服务器
hy____1234 小时前
Linux_进程间通信
linux·运维·服务器
Meaauf5 小时前
VMware安装中科方德服务器操作系统
运维·服务器·中科方德
mftang5 小时前
现代互联网安全的基石: SSL/TLS技术介绍
服务器·网络·ssl