首先该DEMO在StreamCoder上面做的改动,期间导致StreamCoderDEMO经常出现问题,导致大家运行的时候,频频出现问题,表示道歉。

以下是测试的结果,从服务器下载传输了一个3G左右的文件(Win7.iso)。传输后用Hash工具做了个测试,是一样的。后面贴出了两个文件的贴图。

下面是客户端接受到文件的hash截图

下面是服务端源文件的hash截图

协议和功能

该DEMO由客户端请求服务端位与Files下面的文件,第一次请求文件信息(文件大小),请求到文件后,请求下载文件数据,收到后重复继续请求下载下一块文件数据,直到所有数据完成。

该DEMO的Stream文件头写入了该结构体信息。

TFileHead = record
  Flag: Word;    //固定$A1标记
  cmd: Word;   // 1, 请求文件数据, 2: 文件数据, 10: 请求文件信息, 11: 文件信息数据
  FileName: string[255];  //文件名
  Position: Int64;   //文件位置<请求文件数据时指定读取文件数据的位置>
  Size: Int64;          //数据大小<请求文件数据时表示请求的数据大小;返回文件数据(2)时,表示数据的大小。
  crc: Cardinal;      //暂时没有试用
  cmd_result:Integer;  //  0:成功, 1:文件找不到, 2:出现了异常, 3:错误的请求参数

end;

由于下载数据的位置和大小可以由请求中进行指定,所以可以进行断点续传,这是我平常用到的协议。

部分代码讲解

客户端由一个IocpFileTrans类完成主要的功能。

改按钮代表请求下载服务端Files\demoFile.jpg文件。

procedure TfrmMain.btnGetFileClick(Sender: TObject);
begin
if not FiocpCoderTcpClient.isActive then
begin
uiLogger.logMessage('please do connect');
exit;
end; FFileAsyncTrans.requestFileINfo(edtFileID.Text);
end;

请求有回应后(onRecvObject),进行文件数据的请求

接收到数据后(onRecvObject),写入数据后,继续请求下一块数据,所有数据(Postion = size)完成,关闭文件,完成下载。

服务端有MyClientContext类处理客户端的请求和返回数据的工作

请求文件信息命令,  返回文件信息,(文件大小:lvResult.size)

请求文件数据,返回读取的文件大小(lvResult.Size), 和文件数据lvFileData

最后将文件头信息和文件数据合并到Stream中,用writeObject方法返回给客户端。

上面讲述了客户端和服务端文件处理的流程部分的代码。该DEMO只是一个演示,希望能加深大家对diocp的理解。

DEMO路径存放 samples\iocp-coder\streamCoder

注意:请求的文件必须存在输出路径的Files目录下面,

客户端请求的文件,只需要Files目录下面对应的文件名

DIOCP开源项目-DIOCP3 大文件的传输DEMO<断点续传>的更多相关文章

  1. DIOCP开源项目-DIOCP3的重生和稳定版本发布

    DIOCP3的重生 从开始写DIOCP到现在已经有一年多的时间了,最近两个月以来一直有个想法做个 30 * 24 稳定的企业服务端架构,让程序员专注于逻辑实现就好.虽然DIOCP到现在通讯层已经很稳定 ...

  2. DIOCP开源项目-DIOCP3的LoadRunner11测试报告

    昨天有个多年的群友(B3.Locet)用LoadRunner11对DIOCP3做压力测试,说测试的时候出现了大量的10053,10054的报告.昨天晚上下载了个LoadRunner11, 今天捣鼓了下 ...

  3. DIOCP开源项目-DIOCP3直接发送对象,帮你处理粘包问题

    该DEMO演示,如何在客户端与服务端之间直接传递TStream对象,让你专注于处理数据逻辑,可以忽略处理网络传输间粘包的问题. 上面由服务端向所有的客户端推送一个消息TMemoryStream对象(该 ...

  4. DIOCP开源项目-DIOCP3的ECHO测试<贴图>

    星期六开了测试台测试机子.星期天休息,今天早上来接两个图 开了2个客户端,一个qsl的echo client,一个是楠楠的dbiocp回调客户端.建立13240个连接 今天来后,机子很卡,后来发现是楠 ...

  5. DIOCP开源项目-DIOCP3重写笔记-1

    这几天在在重新DIOCP3,基本工作已经初步完成,进入测试阶段,今天加入排队投递,本认为是个很简单的工作,稍微不注意,留了两个坑,调了7,8个小时,刚刚总算找到问题,记录一下, 关于排队投递的流程 这 ...

  6. DIOCP开源项目-高效稳定的服务端解决方案(DIOCP + 无锁队列 + ZeroMQ + QWorkers) 出炉了

    [概述] 自从上次发布了[DIOCP开源项目-利用队列+0MQ+多进程逻辑处理,搭建稳定,高效,分布式的服务端]文章后,得到了很多朋友的支持和肯定.这加大了我的开发动力,经过几个晚上的熬夜,终于在昨天 ...

  7. 简单实现TCP下的大文件高效传输

    简单实现TCP下的大文件高效传输 在TCP下进行大文件传输不象小文件那样直接打包个BUFFER发送出去,因为文件比较大所以不可能把文件读到一个BUFFER发送出去.主要有些文件的大小可能是1G,2G或 ...

  8. webservice大文件怎么传输

    版权所有 2009-2018荆门泽优软件有限公司 保留所有权利 官方网站:http://www.ncmem.com/ 产品首页:http://www.ncmem.com/webapp/up6.2/in ...

  9. Ajax大文件切割传输

    文件上传服务器的大小是一定的,所以大文件可以切割成小文件,依次 传输,然后再拼接切割文件上传,用同步方式传输,为了防止异步传输 中多个块同时传输,文件拼接错误,导致文件损坏 前端页面 <!doc ...

随机推荐

  1. ios实例开发精品文章推荐(7.23)

    ---------------------------------------------------------------------------------------------------- ...

  2. Python的多线程技巧

    使用多线程可以加快程序运行速度. 遍历占用cpu不高,单线程跑程序占用的CPU很少. 多线程则是CPU占用多,内存占用少了. [一个实例]:multi_process.py ### multi_pro ...

  3. 关于JAVA路径 问题

    1.基本概念的理解  绝对路径:绝对路径就是你的主页上的文件或目录在硬盘上真正的路径,(URL和物理路径)例如: C:\xyz\test.txt 代表了test.txt文件的绝对路径.http://w ...

  4. mount 需要同时设置 noatime 和 nodiratime 吗?

    相信对性能.优化这些关键字有兴趣的朋友都知道在 Linux 下面挂载文件系统的时候设置 noatime 可以显著提高文件系统的性能.默认情况下,Linux ext2/ext3 文件系统在文件被访问.创 ...

  5. 树莓派进阶之路 (026) - 基于 Samba 实现 NAS 系统

    摆弄了几天Raspberry Pi,在搞定了无线网络.FTP服务之后,打算更进一步,通过Samba实现NAS系统与PC共享文件.需要安装的软件:sudo apt-get install samba s ...

  6. 浅谈bitmap算法

    一.bitmap算法思想 32位机器上,一个整形,比如int a; 在内存中占32bit位,可以用对应的32bit位对应十进制的0-31个数,bitmap算法利用这种思想处理大量数据的排序与查询.  ...

  7. POJ 2976 Dropping tests (0/1分数规划)

    Dropping tests Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 4654   Accepted: 1587 De ...

  8. Andoird通信之简单聊天ChatApp

    Android通信,大体上的逻辑是跟Java上的通信是差不多的,只是因为Android线程不能直接访问UI界面组件,所以在处理的时候有些麻烦,只要是通过Handle处理. 接下来是一个简单地手机聊天A ...

  9. 【Android】Android屏幕状态操作

    目录结构: contents structure [+] 如何监听屏幕锁屏 如何实现手机屏幕在锁屏后继续运行 最近笔者在做一个功能,就是实现Android程序在锁屏后可以继续运行,笔者在网上查了一些资 ...

  10. android开发资源

    android仿微信 http://www.oschina.net/code/snippet_253900_33261