AsyncStreamCopier类(NetworkComms 2.3.1源码了解和学习)

NetworkComms网络通信框架序言

networkComms.net2.3.1开源版本,基于gpl V3协议。因为不能公开3.x版本的源码,所以基于此版本进行学习。3.X版本进行了诸多改进和Bug修复,使用方法上两者相差不大。 /*请注意使用以下代码,需遵循GplV3协议*/ using System; using System.Collections.Generic; using System.Text; using System.IO; using System.Threading; namespace DPSBase { public class AsyncStreamCopier { /// <summary> /// 拷贝数据完成 触发的事件 /// </summary> public event EventHandler Completed; private byte[] buffer = new byte[4096]; public AsyncStreamCopier() { } /// <summary> ///开始一个异步的数据拷贝 /// </summary> public void Start(Stream input, Stream output) { GetNextChunk(new Stream[] { input, output }); } private void GetNextChunk(Stream[] streams) { var input = streams[0]; //把Stream[0] 中的输入数据流中的数据读取到buffer中,当buffer中的数据读取完成后,触发InputReadComplete方法 input.BeginRead(buffer, 0, buffer.Length, InputReadComplete, streams); } private void InputReadComplete(IAsyncResult ar) { var streams = ar.AsyncState as Stream[]; var input = streams[0]; var output = streams[1]; //等待挂起的异步读取完成。 int bytesRead = input.EndRead(ar); if (bytesRead == 0) { RaiseCompleted(); return; } // 同步写入 output.Write(buffer, 0, bytesRead); // 读取下一数据块 GetNextChunk(streams); } private void RaiseCompleted() { if (Completed != null) { Completed(this, EventArgs.Empty); } } public static void CopyStreamTo(Stream source, Stream destination) { //信号灯-默认无信号 来进程不得通行 var completedEvent = new ManualResetEvent(false); // copy as usual but listen for completion var copier = new AsyncStreamCopier(); //一旦完成,给信号 copier.Completed += (s, e) => completedEvent.Set(); //开始拷贝数据,如果拷贝数据完成,触发信号灯 copier.Start(source, destination); //有交警 需要信号 否则等待 completedEvent.WaitOne(); } } } http://www.cnblogs.com/networkcomms http://www.networkcoms.cn 编辑

 

来自英国剑桥的c#网络通讯框架  开源版本: networkcomms2.3.1  可以进入此页面下载 networkcomms网络通讯框架学习 

【开源下载】基于TCP网络通信的即时聊天系统(IM系统)(c#源码)

[源码下载]Demo2.模拟简单登陆-效果图 基于networkcomms2.3.1

[源码下载]Demo1 客户端从服务器获取信息(基于networkcomms2.3.1)

【开源下载】基于TCP网络通信的自动升级程序c#源码

【模板下载】分享我所使用的数据库框架

【模板下载】innosetup 制作.net安装包的模板

 

【模板下载】分享我所使用的数据库框架

你可能感兴趣的:(NetWork)