C# 中TCP传输文件的思路是啥啊? 传输数据我会,可传输文件就卡住了
小弟刚学C#,求传输文件的思路啊,,。
------解决方案--------------------文件不是数据吗?
你这是典型的思路问题
把文件读取出来就相当于你说的数据了
接收后再把文件存起来就完了
------解决方案--------------------传输文件和传输数据,本质上是一样的。传输文件卡住,可能是因为,你要传输的文件过大。传输大容量文件时,你可以放后来线程里分段执行,这样,给前台用户体验就不会卡。
------解决方案--------------------windows socket编程的神器TransmitPackets不要浪费,在.net中的方法为Socket.SendPacketsAsync(SocketAsyncEventArgs e)。
优点有这么几个:
1、避免频繁的用户态与内核态转换;
2、不会将文件数据载入应用程序内存;
3、传输整个文件夹更加方便。
使用方法:
传输方:定义SendPacketsElement[]集合,传输每个文件时,先在该数组中加入一个文件定义的SendPacketsElement,比如文件长度,文件名;再在该数组中加入一个文件地址的SendPacketsElement;之后调用Socket.SendPacketsAsync(SocketAsyncEventArgs e)。
接收方:先根据协议接收文件定义的SendPacketsElement,得到文件长度和文件名后,创建FileStream,开始接收文件,边接收边写入硬盘,直到累计接收长度等于文件长度时结束。
------解决方案--------------------http://www.cnblogs.com/JimmyZhang/archive/2008/09/16/1291857.html
这个博客很不错, 网络编程的四篇文章很是给力 ,通俗易懂