封包和组包发送的学习例程

易语言 2020-08-21 20:03:06

封包和组包发送的学习例程

发送数据使用 链表 数据结构存储,确保在完整接受前,可选择性重发任意一个信息包。
经测试大文件传输稳定可靠。

收到数据处理 (收到数据包, 数据包头, 数据包, 数据包长度, 数据健值, 数据包MD5)
.如果真 (数据包头 = “信息”)
总数据 = { }
数据包数量 = 数据健值
服务器1.发送数据 (服务器1.取回客户 (), 到字节集 (“发送0”), ) ' 提示发送第一个数据包
.如果真结束
.如果真 (数据包头 = “数据”)
进度条位置 = 取整 (数据健值 ÷ 数据包数量 × 100)
进度条1.位置 = 进度条位置
调试输出 (“键值为:” + 到文本 (数据健值))
.如果 (数据健值 + 1 ≥ 数据包数量) ' 收到的数据包是最后一个数据包
服务器1.发送数据 (服务器1.取回客户 (), “发送” + 到文本 (数据健值), ) ' 最后一个数据包,如果收到的数据部符,就重发该包
总数据 = 总数据 + 数据包
输出调试文本 (“收到的数据大小:” + 到文本 (取字节集长度 (总数据)))
图片框1.图片 = 总数据
服务器1.发送数据 (服务器1.取回客户 (), “收完”, ) ' 发送收完信息
.否则
.如果 (取数据摘要 (数据包) ≠ 数据包MD5) ' 不是最后一个数据包
服务器1.发送数据 (服务器1.取回客户 (), “发送” + 到文本 (数据健值), ) ' 提示重发当前键值数据包
.否则
总数据 = 总数据 + 数据包
输出调试文本 (“收到的数据大小:” + 到文本 (取字节集长度 (总数据)))
服务器1.发送数据 (服务器1.取回客户 (), “发送” + 到文本 (数据健值 + 1), ) ' 提示下一个数据包