欢迎来到.net学习网

欢迎联系站长一起更新本网站!QQ:879621940

您当前所在位置:首页 » ASP.Net » 正文

热门阅读

ESFramework4.0文件传送 如此简单(1)

创建时间:2011年06月12日 23:38  阅读次数:(5241)
分享到:

ESFramework,是一套可高度复用的、灵活的、单纯而又强大的.NET通信框架,全部采用C#编写。ESFramework内置了对Tcp和Udp的支持,并且支持文本协议和流协议,提供了多种网络引擎供服务端和客户端开发人员轻松使用。采用ESFramework框架,使得您不需要了解Socket、不用再关心底层与通信相关的一切琐碎的事情,就可以在一个更高的层次上更快地开发属于您的高效稳定的网络通信应用。像IM系统、视频会议系统、数据采集系统等,凡是需要分布式通信的系统都可以使用ESFramework框架。

一.ESPlus的文件传送流程

ESPlus定义了文件传送的标准流程,可以用下图表示:

(1)由发送方发起传送文件的请求。

(2)接收方回复同意或者拒绝接收文件。如果拒收,则流程结束;否则进入下一步。

(3)发送方发送文件数据,接收方接收文件数据。

(4)如果文件传送过程中,接收方或发送方掉线或者取消文件传送,则文件传送被中断,流程结束。如果文件传送过程一直正常,则到最后完成文件的传送。

有几点需要说明一下:

(1)发送方可以是客户端,也可以是服务器;接收方也是如此。但无论发送方和接收方的类别如何,它们都遵守这一文件传送流程;就像ESFramework所有的通信引擎都公用同一套消息处理骨架流程一样。

(2)当接收方同意接收后,框架会自动搜索是否存在匹配的续传项目,若存在,则会启动断点续传。当然,我们可以通过文件接收管理器的属性来控制断点续传功能是否开启。关于断点续传的更多内容,可以参考ESFramework 4.0 文件断点续传原理与实现。

(3)进行文件传送的线程是由框架自动控制的,只要发送方收到了接收方同意接收的回复,框架就会自动在后台线程中发送文件数据包;同样,此时接收方也会自动处理接收到的文件数据包。

(4)发送方或接收方都可随时取消正在传送的文件。

(5)当文件传送被中断或完成时,发送方和接收方都会有相应的事件通知。

二.ESPlus用于支持文件传送的基础设施

1.TransmittingFileInfo

无论是发送方还是接收方,针对每个文件传送任务,都需要有个对象来表示它,TransmittingFileInfo便是一个文件传送项目的封装,里面包含了类似发送者ID、接收者ID、文件名称等相关信息。

TransmittingFileInfo的大部分属性对于发送方和接收方都是有效的,而有几个属性只对发送方有效(比如SendingFileParas),有几个属性只对接收方有效(如LocalSaveFilePath),这些在帮助文档中都有详细的说明。而且,有些属性(如OriginFileLastUpdateTime)的存在是用于支持断点续传功能的。

2.FileTransDisrupttedType

ESPlus使用FileTransDisrupttedType枚举定义了所有可能导致文件传送中断的原因:

  1. public enum FileTransDisrupttedType  
  2. {  
  3. /// <summary>  
  4. /// 自己主动取消  
  5. /// </summary>  
  6. ActiveCancel,  
  7. /// <summary>  
  8. /// 对方取消  
  9. /// </summary>  
  10. DestCancel,  
  11. /// <summary>  
  12. /// 对方掉线  
  13. /// </summary>  
  14. DestOffline,  
  15. /// <summary>  
  16. /// 网络中断、自己掉线  
  17. /// </summary>  
  18. SelfOffline,  
  19. /// <summary>  
  20. /// 对方拒绝接收文件  
  21. /// </summary>  
  22. DestReject,  
  23. /// <summary>  
  24. /// 其它原因,如文件读取失败等  
  25. /// </summary>  
  26. OtherCause  
  27. }  

3.IFileTransferingEvents 接口

ESPlus定义了IFileTransferingEvents接口,用于暴露所有与文件传送相关的状态和事件:

  1. public interface IFileTransferingEvents  
  2. {  
  3. /// <summary>  
  4. /// 当某个文件开始传送时,触发该事件。  
  5. /// </summary>  
  6. event CbGeneric<TransmittingFileInfo> FileTransStarted;  
  7. /// <summary>  
  8. /// 当某个文件续传开始时,触发该事件。(将不再触发FileTransStarted事件)  
  9. /// </summary>  
  10. event CbGeneric<TransmittingFileInfo> FileResumedTransStarted;  
  11. /// <summary>  
  12. /// 文件传送的进度。参数为fileID(文件编号) ,total(文件大小) ,transfered(已传送字节数)  
  13. /// </summary>  
  14. event CbFileSendedProgress FileTransProgress;   
  15. /// <summary>  
  16. /// 文件传送中断时,触发该事件。  
  17. /// </summary>  
  18. event CbGeneric<TransmittingFileInfo, FileTransDisrupttedType> FileTransDisruptted;  
  19. /// <summary>  
  20. /// 文件传送完成时,触发该事件。  
  21. /// </summary>  
  22. event CbGeneric<TransmittingFileInfo> FileTransCompleted;   
  23. 来源:
    说明:所有来源为 .net学习网的文章均为原创,如有转载,请在转载处标注本页地址,谢谢!
【编辑:Wyf

打赏

取消

感谢您的支持,我会做的更好!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

最新评论

共有评论0条
  • 暂无任何评论,请留下您对本文章的看法,共同参入讨论!
发表评论:
留言人:
内  容:
请输入问题 61+44=? 的结果(结果是:105)
结  果: