基本信息
源码名称:C# 仿QQ发送文件 含(客户端+服务端源码)
源码大小:0.16M
文件格式:.rar
开发语言:C#
更新时间:2015-09-16
   友情提示:(无需注册或充值,赞助后即可获取资源下载链接)

     嘿,亲!知识可是无价之宝呢,但咱这精心整理的资料也耗费了不少心血呀。小小地破费一下,绝对物超所值哦!如有下载和支付问题,请联系我们QQ(微信同号):813200300

本次赞助数额为: 2 元 
   源码介绍


namespace Core
{
    public delegate void ReceivedBitmapHandler(Bitmap bitmap);

    public class TransferHandler
    {
        private readonly Socket _client;
        public event ReceivedBitmapHandler ReceivedBitmap;

        public TransferHandler(Socket client)
        {
            _client = client;
        }

        public void BeginReceive()
        {
            byte[] buffer = new byte[8];
            //由于long占8位字节,所以先获取前8位字节数据
            IAsyncResult iar = _client.BeginReceive(
                buffer,
                0,
                buffer.Length,
                SocketFlags.None,
                null,
                null);
            if (iar != null)
            {
                int len = _client.EndReceive(iar);
            }
            const int offset = 0;
            int length = BitConverter.ToInt32(buffer, offset);  //先获取文件长度
            ReceiveFile(length);

            BeginReceive();  //继续接收
        }

        public void ReceiveFile(long filelen)
        {
            MemoryStream ms = new MemoryStream();
            long count = 0;
            byte[] buffer = new byte[8192];

            while (count != filelen)
            {
                int bytesRead = _client.Receive(buffer, buffer.Length, 0);
                ms.Write(buffer, 0, bytesRead);
                count  = bytesRead;
            }

            ReceivedBitmap(new Bitmap(ms));
        }

        public void SendFile(string filename)
        {
            FileInfo fi = new FileInfo(filename);

            byte[] len = BitConverter.GetBytes(fi.Length);

            //首先把文件长度发送过去
            _client.BeginSendFile(filename,
                len,
                null,
                TransmitFileOptions.UseDefaultWorkerThread,
                new AsyncCallback(SendFileCallback),
                null);
        }


        private void SendFileCallback(IAsyncResult iar)
        {
            _client.EndSendFile(iar);
        }
    }
}