DIOCP开源项目-DIOCP3 大文件的传输DEMO<断点续传>

简介: 首先该DEMO在StreamCoder上面做的改动,期间导致StreamCoderDEMO经常出现问题,导致大家运行的时候,频频出现问题,表示道歉。 以下是测试的结果,从服务器下载传输了一个3G左右的文件(Win7.iso)。

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

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

K6V9QY1LDQMBF)1JXN~K3`O

 

 

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

Z`Z]T4H(M3(2H0FI]B)X1OG

 

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

P~WNR$Y{X~L}8(2HV[}C)CI

 

协议和功能

该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类完成主要的功能。

 

image

改按钮代表请求下载服务端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),进行文件数据的请求

image

 

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

image

 

 

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

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

image

 

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

image

 

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

image

 

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

 

 

 

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

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

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

目录
相关文章
|
8月前
|
存储 算法 Java
从零开始学习 Java:简单易懂的入门指南之IO序列化、打印流、压缩流(三十三)
从零开始学习 Java:简单易懂的入门指南之IO序列化、打印流、压缩流(三十三)
|
存储 Java UED
Java网络编程:实现文件断点续传功能
文件下载是网络应用程序中的常见任务,而断点续传是提供更好用户体验的重要功能之一。本文将详细介绍如何使用Java实现文件断点续传功能,使用户能够在下载中断后从上次中断的地方继续下载。
260 0
|
8月前
|
API 数据安全/隐私保护
jrtplib开源库系列之三:jrtplib发送接收数据流程
前面2篇文章主要说明了如何安装jrtplib库,以及对example1进行了说明,这篇文章主要说下jrtplib库数据的收发流程。
328 0
|
Android开发
《深入理解Android:Telephony原理剖析与最佳实践》一3.1 何为同步和异步
本节书摘来自华章出版社《深入理解Android:Telephony原理剖析与最佳实践》一 书中的第3章,第3.1节,作者:杨青平,更多章节内容可以访问云栖社区“华章计算机”公众号查看。
1328 0
|
数据库
Diocp截图
跑了个数据库的查询和插入,删除。     Http SVR DEMO http://123.232.98.202:8081/
625 0
|
编译器 C语言
【被C折腾系列】用C调DIOCP编码客户端通信
前几天有个朋友,说他们公司做手游,服务端用的DIOCP3里面做文件服务器,客户端用cocos-x,在调试与diocp通信时老是失败!   于是,我下载了一个Codeblocks经过几个小时的折腾,终于折腾出来了,把其中的一些心酸记录下,以便以后查阅。
812 0
DIOCP-V5发布
DIOCP-v5开源项目 https://github.com/ymofen/diocp-v5   DIOCP-v5 0.0.1   2015-02-22 08:40:40 1.规范单元文件的命名,和组件的命名 2.中文注释重要的过程和类名
955 0
|
监控 API
【DIOCP3-说明书】DIOCP3的输出日志
DIOCP3除了有详细的监控面板之外,还有详细的输出日志,当然需要打开日志编译开关! 在工程选项加入DEBUG编译指令,这样在运行中就可以看到DIOCP3的运行详细日志 日志输出在EXE相同目录的LOG文件夹下面。
1028 0