SilverLight搭建WCF聊天室详细过程(十五)接收文件
时间:2010-12-26 来源:fugitiver
上一节我们讲到如何分段发送文件,这节我主要讲下接收文件并保存为本地文件,接收过程就是发送的一个你过程,由于是二进制文件流,所以我们只要保存时保存成发送文件的后缀就可以了,先看下流程图:
流程图解释:当发送方发送一段二进制数据流时,接收方会把这段流写入到文件并且只要发送状态为0,就一直打开文件流等待写入。
关键代码:
代码 public void fileReceive(string id, byte[] content, int state)
{
if (fileStream.ContainsValue(id))//确定接收文件列表中是否包含这个文件
{
Stream stream = fileStream.Where(f => f.Value == id).First().Key;//找到这个文件流
proBarList.Where(f => f.Tag.ToString() == id).First().Value += (double)content.Length / 1048576;//进度条增加
stream.Write(content, 0, content.Length);//写入文件
if (state == 1)//如果状态为文件传输最后一块
{
stream.Close();//关闭流
fileStream.Remove(stream);//移除流
chatForm.spContent.Children.Remove(chatForm.spContent.Children.Where(f => (f as fileprompt).Tag.ToString() == id).First());
if (fileStream.Count == 0)
{
chatForm.LayoutRoot.Width = chatForm.LayoutRoot.Width==400?500:400;
chatForm.cdContent.Width = new GridLength(0);
}
}
}
} }
思路分析:
当发送方发送完文件中的一段时,服务端开始发送给接收客户端,客户端fileStream保存已经同意接受的文件流,通过GUID找到文件流,开始写入,直到发送方通知接收方文件发送完成。
下一节我会对文件收发模块总结,把总体思路介绍给大家。
本节代码下载
相关阅读 更多 +