基本信息
源码名称:C# 仿QQ发送文件 含(客户端+服务端源码)
源码大小:0.16M
文件格式:.rar
开发语言:C#
更新时间:2015-09-16
友情提示:(无需注册或充值,赞助后即可获取资源下载链接)
嘿,亲!知识可是无价之宝呢,但咱这精心整理的资料也耗费了不少心血呀。小小地破费一下,绝对物超所值哦!如有下载和支付问题,请联系我们QQ(微信同号):78630559
本次赞助数额为: 2 元×
微信扫码支付:2 元
×
请留下您的邮箱,我们将在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);
}
}
}