讨教socket文件传输问题

.Net技术 码拜 5年前 (2016-04-30) 413次浏览
  最近在做文件传输,遇到一个小问题困扰了很久:文件传输完成后,本地显示文件是0KB,也就是还没有从缓冲区写入,而本人已经使用了filestream.flush()  ,   filestream.close()也没有效果。只有使用sokcet..close()或关闭例程之后,本地文件才能写入。而关闭socket连接不利于本人接下去的操作。
本人猜测是socket连接与filestream之间的连接没有被切断,导致本人接下去的程序代码都无法继续执行,不知道该怎么样解决,求帮助各位!
解决方案

30

你判断能否接受完最好用文件的实际大小作为判定条件,当接收到足够的字节数时就退出。别忘了,你发送的文件可能和别的消息粘在一起,你得处理这种情况。另外最好是每写入一次就flush一次

5

1、假如文件已经存在,FileMode.Create会覆盖掉原先的文件
2、Receive.ReceiveVarData是什么?它确实有返回数据么?

5

引用:
Quote: 引用:

文件流没释放的关系。写文件加上
usin(filestream…..)
{
}

//获得主机号
string sen = System.Text.Encoding.Unicode.GetString(Receive.ReceiveVarData(soc));
//获得接收者
string rece = System.Text.Encoding.Unicode.GetString(Receive.ReceiveVarData(soc));
//获得[文件名]
string trueFileName = System.Text.Encoding.Unicode.GetString(Receive.ReceiveVarData(soc));
//获得[包的大小]
string bagSize = System.Text.Encoding.Unicode.GetString(Receive.ReceiveVarData(soc));
//获得[包的总数量]
int bagCount = int.Parse(System.Text.Encoding.Unicode.GetString(Receive.ReceiveVarData(soc)));
//获得[最后一个包的大小]
string bagLast = System.Text.Encoding.Unicode.GetString(Receive.ReceiveVarData(soc));
string filepath = SavePath + trueFileName;
FileStream MyFileStream = new FileStream(filepath, FileMode.Create, FileAccess.Write);
//已发送包的个数
int SendedCount = 0;
while (true)
{
byte[] data = Receive.ReceiveVarData(soc);
if (data.Length == 0)
{
break;
}
else
{
SendedCount++;
//将接收到的数据包写入到文件流对象
MyFileStream.Write(data, 0, data.Length);
}
}
MyFileStream.Flush();
//关闭文件流
MyFileStream.Close();
求指导 谢谢!

MyFileStream.Write(data, 0, data.Length);
这个地方,每次索引都从0开始?那永远myfilestream长度永远等于最后一个data.length吧
int indexlength=0;
while(true)
{
…..
MyFileStream.Write(data, indexlingth, data.Length);
indexlength+=data.length;
…..
}


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明讨教socket文件传输问题
喜欢 (0)
[1034331897@qq.com]
分享 (0)