关于网友提出的“c#tcp传图片 有时出现错误”问题疑问,本网通过在网上对“c#tcp传图片 有时出现错误”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:
问题:c#tcp传图片 有时出现错误
描述:本帖最后由 t8565841 于 2015-01-01 19:27:18 编辑
tcpc#传输图片
c#tcp传图片,从服务器下载图片显示,有时会出现错误,我将下载图片文件打开和源文件对比发现文件有问题(文件大小是一样的),求解
服务器
for (int i = 0; i < albumlist.Count; i++)
{
FileStream fs = new FileStream(albumlist[i].A_photo, FileMode.Open, System.IO.FileAccess.Read, FileShare.ReadWrite);
byte[] image = new byte[(int)fs.Length];
int length = (int)fs.Length;
int send = 0;
while (length > 0)
{
send = fs.Read(image,send , length );
length = length - send ;
}
buffer = BitConverter.GetBytes((int)fs.Length);
streamToClient.Write(buffer, 0, buffer.Length);
streamToClient.Write(image, 0, image.Count());
}
客户端
for (int i = 1; i <= num; i++)
{
string fileName = "E:\\mp3\\recalbm" + i + ".png";
FileStream fs = new FileStream(fileName, FileMode.Create);
BinaryWriter bw = new BinaryWriter(fs);
recv = networkstream.Read(buffer, 0, 4);
int t = BitConverter.ToInt32(buffer, 0);
byte[] image = new byte[t];
recv = 0;
while (t > 0)
{
recv = networkstream.Read(image, recv, t);
// Thread.Sleep(100);
t = t - recv;
}
bw.Write(image);
image = null;
bw.Close();
fs.Close();}
解决方案1: while (length > 0)
{
send = fs.Read(image,send , length );
length = length - send ;
}
这种代码, image 内容一遍遍被覆盖,有什么意义啊?
如果你要把 fs 内容“一次性地”写出去,你应该首先缓存起来,例如使用 MemoryStream,(按照你的格式)先入数据长度再写入文件内容,然后使用 MemoryStream.ToArray() 方法获得要写出去的 image 内容。
解决方案2: 你比较一下,是不是文件末尾不同,这种情况一般都是到文件末尾时容易出错
以上介绍了“c#tcp传图片 有时出现错误”的问题解答,希望对有需要的网友有所帮助。
本文网址链接:http://www.codes51.com/itwd/1224316.html