FileStream SendFile = new FileStream(@"H:\迅雷下载\adblockpluschrome-1.8.10.1346.crx", FileMode.Open, FileAccess.Read);
//尝试读取,发送
try
{
int fRead = 0;
int tRead = 0;
byte[] buf = new byte[BufSize];
do
{
fRead = SendFile.Read(buf, 0, buf.Length);
RecSoc.Send(buf, fRead, SocketFlags.None);
tRead += fRead;
} while (fRead > 0);
Console.WriteLine("The length of buffer is {0}!", tRead);
Server端的。
FileStream RecFile = new FileStream(@"F:\adblockpluschrome-1.8.10.1346.crx", FileMode.OpenOrCreate);
int fRead;
long tWrite = 0;
try
{
byte[] buf = new byte[BufSize];
fRead = client.Receive(buf);
while(fRead > 0)
{
RecFile.Write(buf, 0, fRead);
tWrite += fRead;
fRead = client.Receive(buf);
Console.WriteLine("Received {0} bytes!", tWrite);
}
}
Client端的
------解决思路----------------------
为什么两端一个是do,while,一个是while
断点跟,看到底哪端有问题啊,不要靠猜测
------解决思路----------------------
另
tWrite += fRead;
这句话明显有问题
既然while外面read一次,while里面循环read
那么tWrite += fRead;这个代码也应该出现2次才对
都应该放到read后面
否则最后一次接收到的,根本没有累加上去
而且你看文件本身大小确实不一样吗,不是你自己计算的大小不一样而已吗
------解决思路----------------------
RecFile.Write之后
执行一下RecFile.Flush
------解决思路----------------------
估计是服务端已经把文件发完,关闭连接了
你客户端断点,停下了,可是服务端没停啊
------解决思路----------------------
你应该确保关闭连接由客户端来操作,服务端不要随便关闭连接,哪怕文件已经发完了
------解决思路----------------------
在catch里设置断点,看是不是抛错误了
------解决思路----------------------
RecSoc.Send之后也没加flush...
最好还是找个完整的例子参考一下,不要全靠拍头
这东西你自己做了玩还行,真正想用,还差的远,会遇到很多问题
------解决思路----------------------
------解决思路----------------------
什么叫不用flush的版本
write之后就必然要flush
你可以自己封装一个方法,把flush写里面,就不用每次再次调用flush了