C# 文件传输
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C# 文件传输相关的知识,希望对你有一定的参考价值。
A机器上有a、b、c、d四个文件,现要通过socket将文件传送至B机器,我在传a文件时,传至一半时需要停止a文件的传输与接收,开始传b文件,该如何处理。
能不能说详细点,有没有示例代码?发我邮箱yuxiangbo_cn@163.com.
也不是只发一半,可能是a文件正在发送的时候,用户要求取消a文件的发送,改发b文件。
//发送端
NetworkStream netstream = client.GetStream();
BinaryWriter bw = new BinaryWriter(netstream);
filestream = new FileStream(@"c:\aa.txt", FileMode.Open, FileAccess.Read);
byte[] bb = new byte[1024];
while (filestream.Read(bb, 0, 1024)!= 0)
bw.Flush();
bw.Write(bb.Length);
bw.Write(bb);
bw.Flush();
string eofStr2 = "<EOF>";
bb = System.Text.Encoding.UTF8.GetBytes(eofStr2);
bw.Write(bb.Length);
bw.Write(bb);
bw.Flush();
filestream.Close();
怎么样停止a文件的发送与接收改发b文件。
//接收端部分代码
while (true)
string ss = System.Text.Encoding.UTF8.GetString(bye);
int x = ss.IndexOf("<EOF>");
if (x != -1)
break;
else
filestream.Write(bye, 0, bye.Length);
filestream.Flush();
bytelen = br.ReadInt32();
bye = br.ReadBytes(bytelen);
int n = s.Send(b, end, start, SocketFlags.None); //用Socket的Send方法发送流
end += n;
start -= n;
原理是这样的,发送文件的时候,通过参数知道已经发送了多少,接着用if判断如果发送一半了,就停止发送,接着执行发送b的操作。
不过我不知道你为什么A只发送一半呢? 参考技术B 我看是在传输过程中有出错把。。。。
自己规定一个协议吧。还是比较简单的。
不管是什么情况,还是自己规定一个协议比较好。
简单的说,把文件拆分了发送。每次发送一部分,在这一部分前加一个信息头,包含后面数据的描述。包括数据长度,组成部分。
这样的协议规定好了,还可以以来实现多线程的文件传输。
C#获取response传输的数据大小
对服务器端传给客户端的数据进行统一管理,服务端如何使用response对象再次获取该数据,验证数据的大小?
....全局配置文件..的response事件.即可将您所有将要返回到客户端的数据抓取出来.这是办法1.
然后获取大小?
跟获取request的方式一样.都有一个data的存储区域的.打上断点看一下即可.
第二个办法.
注入HttpModule.重写返回过程.
两个办法仅仅只是说抓取点不同而已.实质上是没有太大区别的 参考技术A ....全局配置文件..的response事件.即可将您所有将要返回到客户端的数据抓取出来.
这是办法1.
然后获取大小?
跟获取request的方式一样.都有一个data的存储区域的.打上断点看一下即可.
第二个办法.
注入HttpModule.重写返回过程.
两个办法仅仅只是说抓取点不同而已.实质上是没有太大区别的 参考技术B 不明白 你要做啥 参考技术C 你向客户端传送的时候,累加数据包??追问
服务器向客户端传送的数据有大有小,对于小数据没必要进行gizp压缩,只有对于大数据进行压缩才会效率更高,所以想要对服务器端传出的数据警醒一一验证,那就要想办法从服务器的response对象中获取传输的数据判断是否要压缩?
以上是关于C# 文件传输的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 jabber net 在 c# Windows 应用程序中实现文件传输
在 C# 中使用 WinSCP 传输仅包含数字而不包含字母的文件?