局域网传送文件问题 、
用sockte tcp协议局域网传送文件,为什么会出现文件损坏的问题:传送图片打不开,传送软件显示损坏。
帮忙解决一下,谢谢。
这是我发送文件的代码:
byte[] buff1 = new byte[1024];
FileStream fs = new FileStream(path, FileMode.Open);
int filesize = (int)fs.Length;
buff1 = System.Text.Encoding.BigEndianUnicode.GetBytes(filesize + "-" + "file" + ":" + filename + "。");/ /获取文件名,及文件大小
use.Send(buff1, buff1.Length, SocketFlags.None);//发送文件名 及文件的大小
byte[] buff = new byte[1024];
prbSend.Maximum = (int)Math.Ceiling((double)filesize / (double)1024);//设置进度条最大值
int dq = 0;
int yfs = 0;
while ((dq=fs.Read(buff,0,1024))!=0)//循环读取
{
fs.Flush();
use.Send(buff,dq, SocketFlags.None);
prbSend.Value += 1;
yfs += dq;
}
fs.Close();
use.Close();
contr(false);
prbSend.Value = 0;
MessageBox.Show("发送成功");
这是接收的代码:
int filesize = Convert.ToInt32(m.Substring(0, m.IndexOf("-")));//文件大小
int q=m.IndexOf(':')+1;
int j = m.IndexOf('。') - 1 - filesize.ToString().Length - 5;
filename = m.Substring(q,j );//文件名
FileStream fs = new FileStream("F:\\" + filename, FileMode.Create);
fs.Close();
FileStream write = new FileStream("F:\\" + filename, FileMode.Append, FileAccess.Write);
byte[] buff1 = new byte[1024];
int yjs = 0;
int js = 0;
while ((yjs=use.Receive(buff1))!=0)//循环接收
{
write.Write(buff1,0,yjs);
write.Flush();
js += yjs;
}
write.Close();
tcp
file
------解决方案--------------------找一个16进制文件编辑器(winhex or ultraedit),看看原始文件和传输后的文件有什么不同,然后分析你的传输有什么错误。
------解决方案--------------------
接收代码可能有错误。
在拿文件长度filesize的时候,socket已经接收过一次了。
很有可能,你收到的不仅仅是m,还包括一部分文件。
由于没有校验实际收到的文件是否和文件长度相符,你没有发现实际收到的文件比原文件小。