源码程序结合易语言数据操作支持库和数据结构支持库,实现网络传送的数据包的解析功能。
.版本 2
.支持库 EDataStructure
.支持库 iext
.支持库 dp1
.程序集 窗口程序集1
.程序集变量 总数据, 字节集
.程序集变量 数据表, 链表
.程序集变量 已发送, 整数型
.子程序 __启动窗口_创建完毕
按钮1.禁止 = 真
.子程序 _客户1_数据到达
.局部变量 进度条位置, 整数型
.局部变量 收到的数据, 字节集
.局部变量 健值, 整数型
.局部变量 包头, 文本型
收到的数据 = 客户1.取回数据 ()
收到的信息处理 (收到的数据, 健值, 包头)
输出调试文本 (“客户机收到的数据: ” + 到文本 (收到的数据))
.如果真 (包头 = “发送”)
发送分包 (健值)
.如果真结束
.如果真 (包头 = “收完”)
数据表.全部删除 ()
透明标签1.标题 = “传送完毕!”
.如果真结束
.子程序 _按钮1_被单击
.局部变量 分包数量, 整数型
透明标签1.标题 = “”
总数据 = 图片框1.图片
待发送数据处理 (总数据, 1024)
分包数量 = 数据表.取大小 ()
客户1.发送数据 (到字节集 (“信息”) + 到字节集 (#分隔符) + 到字节集 (#分隔符) + 到字节集 (#分隔符) + 到字节集 (#分隔符) + 到字节集 (分包数量)) ' 将要发送的数据总大小,发送
输出调试文本 (“信息” + 到文本 (分包数量))
.子程序 收到的信息处理, , , 拆分信息包
.参数 收到的信息, 字节集
.参数 健值, 整数型, 参考 可空
.参数 包头, 文本型, 可空
包头 = 到文本 (取字节集左边 (收到的信息, 4))
健值 = 到整数 (取字节集数据 (收到的信息, 10, 5))
.子程序 待发送数据处理, , , 将待发送数据以链表的形式存储
.参数 待发送数据, 字节集
.参数 分包大小, 整数型
.局部变量 临时节点, 节点
.局部变量 数据指针, 整数型
.局部变量 待发送数据处理大小, 整数型
.局部变量 分包数据, 字节集
.局部变量 分包数据摘要, 文本型
.局部变量 健值, 整数型
待发送数据处理大小 = 取字节集长度 (待发送数据)
数据指针 = 1
.判断循环首 (数据指针 ≤ 待发送数据处理大小)
临时节点.删除属性 (“数据”)
临时节点.删除属性 (“md5”)
临时节点.删除属性 (“分包头”)
临时节点.删除属性 (“数据长度”)
.如果 (待发送数据处理大小 - 数据指针 ≤ 分包大小)
分包数据 = 取字节集右边 (待发送数据, 待发送数据处理大小 - 数据指针)
.否则
分包数据 = 取字节集中间 (待发送数据, 数据指针, 分包大小)
.如果结束
数据指针 = 数据指针 + 分包大小
分包数据摘要 = 取数据摘要 (分包数据) ' 取分包md5值
临时节点.加入属性 (“数据”, 分包数据)
临时节点.加入属性 (“md5”, 分包数据摘要)
临时节点.加入属性 (“分包头”, “数据”)
临时节点.加入属性 (“数据长度”, 到文本 (取字节集长度 (分包数据)))
' 临时节点.加入属性 (“键值”, 到文本 (分包键值))
数据表.加入节点 (临时节点, )
数据表.到尾节点 ()
数据表.取当前节点键值 (健值)
输出调试文本 (“健值:” + 到文本 (健值) + “分包数据长度为::” + 到文本 (取字节集长度 (分包数据)))
.判断循环尾 ()
.子程序 发送分包, , , 分包头+数据+md5+健值
.参数 健值, 整数型
.局部变量 临时节点1, 节点
.局部变量 节点字节值, 字节集
.局部变量 节点文本值, 文本型
.局部变量 处理后数据, 字节集, , , 分包头+数据+数据长度+md5+健值
数据表.搜索节点 (健值)
数据表.取当前节点 (临时节点1)
' 数据表.取节点 (临时节点, 健值)
临时节点1.取文本值 (“分包头”, 节点文本值)
处理后数据 = 到字节集 (节点文本值) + 到字节集 (#分隔符)
临时节点1.取字节集值 (“数据”, 节点字节值)
处理后数据 = 处理后数据 + 节点字节值 + 到字节集 (#分隔符)
临时节点1.取文本值 (“数据长度”, 节点文本值)
处理后数据 = 处理后数据 + 到字节集 (节点文本值) + 到字节集 (#分隔符)
临时节点1.取文本值 (“md5”, 节点文本值)
处理后数据 = 处理后数据 + 到字节集 (节点文本值) + 到字节集 (#分隔符) + 到字节集 (到文本 (健值))
客户1.发送数据 (处理后数据)
.子程序 _图片框1_被双击, 逻辑型
.参数 横向位置, 整数型
.参数 纵向位置, 整数型
.参数 功能键状态, 整数型
.子程序 _图片框1_鼠标左键被按下, 逻辑型
.参数 横向位置, 整数型
.参数 纵向位置, 整数型
.参数 功能键状态, 整数型
.局部变量 文件名, 文本型
.局部变量 文件号, 整数型
通用对话框1.过滤器 = “所有图片文件(*.jpg;*.bmp;*.gif.....)|*.jpg;*.bmp;*.gif|所有文件(*.*)|*.*”
通用对话框1.打开 ()
文件名 = 通用对话框1.文件名
文件号 = 打开文件 (文件名, 1, )
图片框1.图片 = 读入字节集 (文件号, 取文件尺寸 (文件名))
输出调试文本 (文件名)
.子程序 _按钮2_被单击
.如果真 (编辑框1.内容 ≠ “”)
.如果真 (客户1.连接 (编辑框1.内容, 19730))
按钮1.禁止 = 假
按钮2.禁止 = 真
.如果真结束
.如果真结束
编辑框1.内容 = “请输入服务器IP地址!”
.子程序 _按钮3_被单击
客户1.断开连接 ()
按钮1.禁止 = 真
按钮2.禁止 = 假