开源此贴作废
功能说明: 本程序是一个基于易语言(EPL)开发的网络服务端应用程序,主要用于实现商业网关的登录认证、数据接收与连接管理功能。从代码结构来看,该程序构建了一个 TCP 服务器端,支持多客户端并发连接,并具备数据加密解密、数字签名验证以及详细的日志记录功能。以下是对该程序功能的详细总结:
一、程序核心功能概述
1. 服务端通信管理:程序利用网络库(如 dp1 或 iext2 中的服务端组件)监听指定端口,接受客户端的连接请求。它维护了一个当前的连接计数器,实时统计在线客户端数量。
2. 身份验证机制:程序设计了专门的协议处理逻辑,用于处理“网关认证”和“验证登陆”两种主要的业务场景。它通过比对预设的密码或配置信息来决定是否允许客户端通过验证。
3. 数据安全处理:在数据传输层面,程序集成了加密解密功能。接收到的数据首先需要使用私钥进行解密,随后解析数据包中的签名和内容,确保数据源的完整性和真实性。
4. 可视化监控与日志:提供了一个图形化用户界面(GUI),包含状态栏、操作按钮和日志显示框。能够实时展示服务运行状态、绑定端口、连接数以及带有时间戳和操作级别的系统日志。
二、主要模块与子程序分析
1. 初始化与启动模块(__启动窗口_创建完毕)
这是程序的主入口。当窗口创建完成后,它会执行以下操作:
- 设置窗口标题为“登陆网关 - [服务器名]",明确程序用途。
- 调用日志处理函数记录“正在启动服务..."。
- 尝试启动服务端,绑定配置的端口。如果启动成功,更新状态栏显示端口号和初始连接数(0/0),启用服务停止按钮,禁用服务启动按钮,并启动一个每秒一次的时钟计时器。
- 如果启动失败(例如端口已被占用,错误代码 10048),会捕获异常并通过客户端模拟连接测试来检测 socket 错误,同时在日志中输出具体的 Windows Socket 错误信息。
2. 日志处理模块(子程序_日记处理)
这是一个通用的日志写入接口,负责将系统运行信息输出到界面的编辑框中:
- 支持不同安全级别的颜色区分:红色(高级别)、黄色(中级别)、黄褐色(低级别)、绿色(普通级别)。
- 自动追加当前时间戳,时间格式统一为 [HH:MM:SS]。
- 自动滚动日志窗口至最新一行,方便查看实时状态。
3. 时间工具模块(子程序_取时间)
辅助函数,获取系统当前的小时、分钟和秒,并进行补零处理,最终返回格式化后的文本字符串,供日志模块使用。
4. 数据处理回调模块(子程序_数据处理)
这是整个网络通信的核心逻辑部分,作为服务端事件的回调函数,根据事件类型执行不同的操作:
- 事件类型 1(新连接):当有新客户端连接时,增加当前连接计数,并刷新状态栏显示。
- 事件类型 3(断开连接):当客户端断开时,关闭对应的客户句柄,减少当前连接计数,并刷新状态栏。
- 事件类型 2(收到数据):这是最复杂的逻辑块。
- 首先获取发送方的客户句柄和原始数据字节集。
- 调用解密函数,使用内置的私钥对数据进行解密。
- 使用特定分隔符(‖)分割解密后的数据,提取待验证数据块。
- (注释代码显示)原本计划进行数字签名验证,对比模板和计算出的签名值。
- 再次使用管道符(|)分割数据以提取具体的命令代码和业务数据。
- **网关认证**:如果收到的消息号匹配"#消息号_网关认证”,直接返回认证通过的响应码。
- **验证登陆**:如果收到"#消息号_验证登陆”,则进一步检查第二个参数(密码)是否与基础数据类型中配置的验证密码一致。若不一致,返回失败及错误提示;若一致,返回密码正确的响应码。
- 最后调用服务端返回数据函数,将结果封装并发送回给对应的客户端句柄。
三、业务流程逻辑
程序的运行流程遵循标准的 C/S(Client/Server)架构模型:
1. **启动阶段**:用户打开程序 -> 加载配置 -> 绑定端口 -> 进入监听状态。
2. **连接阶段**:客户端发起连接 -> 服务端接受 -> 连接数+1 -> 状态栏更新。
3. **交互阶段**:客户端发送加密数据包 -> 服务端接收 -> 解密 -> 解析命令 -> 校验密码/签名 -> 生成响应 -> 返回数据。
4. **退出阶段**:客户端断开 -> 服务端感知 -> 连接数 -1 -> 资源释放。
四、技术特性与细节
1. **错误处理**:针对常见的端口冲突问题进行了专门的处理,能够识别“每个套接字地址只允许使用一次”的错误(10048),防止程序因静默失败而无法判断原因。
2. **配置化**:程序中引用了“基本数据类型”这一全局变量组,暗示服务器名、绑定端口、验证密码等敏感信息是从外部配置文件或数据库加载的,便于维护。
3. **安全性**:采用了私钥解密和签名验证机制(虽然部分代码被注释,但框架存在),表明该程序适用于对安全性有一定要求的商业环境,防止中间人攻击或数据篡改。
4. **用户体验**:界面上的状态条实时更新连接数,操作按钮的状态互锁(启动时禁止停止,停止后反之),防止用户在服务未运行时误操作。
五、总结
综上所述,该程序是一个功能相对完整的 TCP 网关服务端原型或成品。它专注于解决客户端的接入认证问题,具备了企业级网关所需的基础能力:状态监控、连接管理、安全通信和日志审计。通过易语言特有的库支持,实现了较为高效的网络编程逻辑,适用于需要快速搭建认证服务器或数据转发网关的场景。代码结构清晰,模块划分合理(界面、逻辑、工具类分离),具备一定的可扩展性,例如后续可以扩展更多的消息号处理逻辑以支持更多业务指令。
======窗口程序集1
| |
| |------ __启动窗口_创建完毕
| |
| |------ 子程序_日记处理
| |
| |------ 子程序_取时间
| |
| |------ 子程序_数据处理
| |
| |------ 子程序_服务端返回数据
| |
| |------ 子程序_发送数据到登陆端
| |
| |------ _关于_被选择
| |
| |------ 子程序_读配置列表
| |
| |------ _连接服务端_时钟_周期事件
| |
| |------ 子程序_线程连接
| |
| |------ 子程序_合成数组
| |
| |------ _启动服务_被选择
| |
| |------ _停止服务_被选择
| |
| |------ _基本设置_被选择
| |
| |------ __启动窗口_可否被关闭
| |
| |------ _客户端_数据到达
| |
| |------ _客户端_连接断开
| |
| |
======窗口程序集2
| |
| |------ _确定_按钮_被单击
| |
| |
======窗口程序集3
| |
| |------ _基本设置窗口_创建完毕
| |
| |------ _是否开启_选择框_被单击
======窗口程序集1
| |
| |------ __启动窗口_创建完毕
| |
| |------ __启动窗口_可否被关闭
| |
| |
======窗口程序集2
| |
| |------ _帐号登陆_创建完毕
| |
| |------ 子程序_服务端0处理
| |
| |------ 子程序_服务端0发送
| |
| |------ 子程序_服务端1处理
| |
| |------ 子程序_服务端2处理
| |
| |------ 子程序_窗口消息函数
| |
| |------ 子程序_读配置项
| |
| |------ 子程序_日记处理
| |
| |------ 子程序_取时间
| |
| |------ _关于_被选择
| |
| |------ _客户端_数据到达
| |
| |------ _帐号登陆_首次激活
| |
| |
======窗口程序集3
| |
| |------ _确定_按钮_被单击
| |
| |
======调用的Dll
| |
| |---[dll]------ SetWindowLongA
| |
| |---[dll]------ CallWindowProcA
| |
| |---[dll]------ GetWindowLong
| |
| |---[dll]------ SetWindowLong
======窗口程序集1
| |
| |------ __启动窗口_创建完毕
| |
| |------ __启动窗口_可否被关闭
| |
| |
======窗口程序集2
| |
| |------ _临时_时钟_周期事件
| |
| |------ _数据库服务器_创建完毕
| |
| |------ 子程序_窗口消息函数
| |
| |------ 子程序_读配置文件
| |
| |------ 子程序_服务端消息处理
| |
| |------ 子程序_另服务端消息处理
| |
| |------ 子程序_服务端发送
| |
| |------ 子程序_置当前库
| |
| |------ 子程序_日记处理
| |
| |------ 子程序_取时间
| |
| |------ _连接登陆_时钟_周期事件
| |
| |------ 子程序_线程连接
| |
| |------ _启动服务_被选择
| |
| |------ _停止服务_被选择
| |
| |------ _临时_通讯时钟_周期事件
| |
| |------ _关于_被选择
| |
| |------ _客户端_连接断开
| |
| |------ _客户端_数据到达
| |
| |------ _数据库服务器_首次激活
| |
| |------ 延迟等待
| |
| |
======窗口程序集3
| |
| |------ _确定_按钮_被单击
| |
| |
======调用的Dll
| |
| |---[dll]------ SetWindowLongA
| |
| |---[dll]------ CallWindowProcA
| |
| |---[dll]------ GetWindowLong
| |
| |---[dll]------ SetWindowLong
| |
| |---[dll]------ CreateWaitableTimerA
| |
| |---[dll]------ SetWaitableTimer
| |
| |---[dll]------ MsgWaitForMultipleObjects
| |
| |---[dll]------ CloseHandle
======主程序集
| |
| |------ _启动子程序
| |
| |------ 初始化引擎
| |
| |------ 判断加载资源
| |
| |------ 屏幕逻辑
| |
| |------ 屏幕渲染
| |
| |------ 游戏数据发送
| |
| |------ 网络发送信息
| |
| |------ 屏幕退出
| |
| |------ 屏幕获得焦点
| |
| |------ 屏幕失去焦点
| |
| |------ 渲染区保护
| |
| |
======初始化程序集
| |
| |------ 初始化_资源数据
| |
| |------ 初始化_变量数据
| |
| |------ 子程序_初始化人物帧
| |
| |
======pex资源包类
| |
| |------ _初始化
| |
| |------ _销毁
| |
| |------ 方法_创建
| |
| |------ 方法_更新
| |
| |------ 方法_显示
| |
| |------ 方法_置颜色
| |
| |------ 方法_重置
| |
| |------ 方法_取当前帧
| |
| |------ 方法_取间隔帧
| |
| |------ 方法_置混合
| |
| |------ 方法_置中心点
| |
| |------ 方法_取状态
| |
| |------ 方法_重置后退
| |
| |------ 方法_单张创建
| |
| |------ 方法_销毁
| |
| |------ 方法_另类重置
| |
| |
======游戏登陆界面
| |
| |------ 子程序_初始化
| |
| |------ 子程序_显示背景
| |
| |------ 子程序_销毁背景
| |
| |
======选择服务器
| |
| |------ 子程序_初始化服务器
| |
| |------ 子程序_显示选服务器
| |
| |------ 子程序_更新选服务器
| |
| |------ 子程序_服务器销毁
| |
| |
======按钮类
| |
| |------ _初始化
| |
| |------ _销毁
| |
| |------ 方法_创建
| |
| |------ 方法_置位置
| |
| |------ 方法_取点燃
| |
| |------ 方法_取按下
| |
| |------ 方法_取弹起
| |
| |------ 方法_取禁止
| |
| |------ 方法_取状态
| |
| |------ 方法_更新
| |
| |------ 方法_显示
| |
| |------ 方法_销毁
| |
| |------ 方法_置弹起
| |
| |------ 方法_置提示
| |
| |------ 显示_提示框
| |
| |------ 是否焦点
| |
| |------ 取宽度
| |
| |------ 取高度
| |
| |------ 置类型
| |
| |
======描边文字类
| |
| |------ _初始化
| |
| |------ _销毁
| |
| |------ 方法_创建
| |
| |------ 方法_置位置
| |
| |------ 方法_显示
| |
| |------ 方法_销毁
| |
| |------ 方法_取文字宽度
| |
| |------ 方法_取文字高度
| |
| |
======登陆界面
| |
| |------ 初始化登陆界面
| |
| |------ 登陆更新
| |
| |------ 登陆清空
| |
| |------ 登陆显示
| |
| |------ 销毁登陆
| |
| |
======新建帐号
| |
| |------ 初始化新建帐号
| |
| |------ 帐号更新
| |
| |------ 帐号显示
| |
| |------ 帐号重置
| |
| |------ 帐号销毁
| |
| |
======修改密码
| |
| |------ 初始化密码界面
| |
| |------ 修改密码更新
| |
| |------ 修改密码显示
| |
| |------ 修改密码销毁
| |
| |------ 重置
| |
| |
======开门程序集
| |
| |------ 初始化开门
| |
| |------ 开门更新
| |
| |------ 开门显示
| |
| |------ 开门销毁
| |
| |
======人物界面
| |
| |------ 初始化人物界面
| |
| |------ 人物界面更新
| |
| |------ 人物界面显示
| |
| |------ 人物界面销毁
| |
| |------ 初始化人物坐标
| |
| |------ 添加待选人物
| |
| |------ 人物界面置显示
| |
| |------ 人物界面取人物数量
| |
| |------ 删除待选人物
| |
| |------ 人物界面取当前选中
| |
| |------ 取人物界面昵称
| |
| |
======创建人物
| |
| |------ 初始化创建人物
| |
| |------ 创建人物更新
| |
| |------ 创建人物显示
| |
| |------ 创建人物按钮重置
| |
| |------ 创建人物性别重置
| |
| |------ 创建人物销毁
| |
| |------ 初始化浏览人物坐标
| |
| |
======选择按钮类
| |
| |------ _初始化
| |
| |------ _销毁
| |
| |------ 方法_创建
| |
| |------ 方法_置位置
| |
| |------ 方法_更新
| |
| |------ 方法_显示
| |
| |------ 方法_销毁
| |
| |------ 方法_取点燃
| |
| |------ 方法_取按下
| |
| |------ 方法_取弹起
| |
| |------ 方法_取选中
| |
| |------ 方法_取状态
| |
| |------ 方法_置选中
| |
| |
======恢复角色
| |
| |------ 初始化恢复角色
| |
| |------ 恢复角色更新
| |
| |------ 恢复角色显示
| |
| |------ 恢复角色销毁
| |
| |
======公告窗口
| |
| |------ 初始化公告
| |
| |------ 公告界面更新
| |
| |------ 公告界面显示
| |
| |------ 公告界面销毁
| |
| |
======窗口程序集1
| |
| |------ _登陆器_窗口_创建完毕
| |
| |------ _开始游戏_按钮_被单击
| |
| |------ _登陆器_窗口_鼠标左键被按下
| |
| |------ _关闭_按钮_被单击
| |
| |------ _官方网站_按钮_被单击
| |
| |------ 子程序_打开网页
| |
| |------ 运行IE
| |
| |------ _购买装备_按钮_被单击
| |
| |------ _游戏论坛_按钮_被单击
| |
| |------ _注册帐号_按钮_被单击
| |
| |------ _修改密码_按钮_被单击
| |
| |------ _找回密码_按钮_被单击
| |
| |------ _更新游戏_按钮_被单击
| |
| |------ 子程序_线程获取列表
| |
| |------ 子程序_取索引
| |
| |------ 子程序_索引位置
| |
| |------ _服务器_树型框_被双击
| |
| |------ 子程序_线程连接
| |
| |------ _窗口化_标签_鼠标左键被放开
| |
| |------ _查杀版本_标签_鼠标左键被放开
| |
| |------ _全局_网络_连接断开
| |
| |------ _全局_网络_数据到达
| |
| |------ 窗口消息处理
| |
| |------ _监视时钟_周期事件
| |
| |
======窗口程序集2
| |
| |------ _取消_按钮_被单击
| |
| |------ _确定_按钮_被单击
| |
| |------ _注册窗口_创建完毕
| |
| |
======窗口程序集3
| |
| |------ _取消_按钮_被单击
| |
| |------ _确定_按钮_被单击
| |
| |------ _修改密码_创建完毕
| |
| |
======窗口程序集4
| |
| |------ _取消_按钮_被单击
| |
| |------ _确定_按钮_被单击
| |
| |------ _找回密码_创建完毕
| |
| |
======全局_提示框类
| |
| |------ _初始化
| |
| |------ _销毁
| |
| |------ 创建
| |
| |------ 更新
| |
| |------ 显示
| |
| |------ 弹出
| |
| |------ 取确定按下
| |
| |------ 取取消按下
| |
| |------ 取类型
| |
| |------ 取可视
| |
| |------ 销毁
| |
| |
======屏幕_界面集
| |
| |------ 初始化屏幕_界面
| |
| |------ 屏幕_界面更新
| |
| |------ 屏幕_界面显示
| |
| |------ 角度换方向
| |
| |------ 加入道具
| |
| |------ 格子移动
| |
| |------ 判断是否点击窗口
| |
| |------ 取鼠标所在窗口
| |
| |------ 窗口冒泡排序
| |
| |------ 是否在窗口内
| |
| |------ 取窗口索引
| |
| |------ 声音播放
| |
| |------ 初始化道具声音
| |
| |------ 显示_提示信息
| |
| |------ 取物品提示语
| |
| |------ 取装备类型
| |
| |------ 取物品隐藏属性
| |
| |------ 截图
| |
| |------ 描边写字
| |
| |------ 是否在按钮内
| |
| |------ 清除数据
注:本站源码主要来源于网络收集。如有侵犯您的利益,请联系我们,我们将及时删除!
部分源码可能含有危险代码,(如关机、格式化磁盘等),请看清代码在运行。
由此产生的一切后果本站均不负责。源码仅用于学习使用,如需运用到商业场景请咨询原作者。
使用本站源码开发的产品均与本站无任何关系,请大家遵守国家相关法律。