当前位置: 代码迷 >> C# >> c#tcp传图片 有时出现异常
  详细解决方案

c#tcp传图片 有时出现异常

热度:413   发布时间:2016-05-05 05:20:46.0
c#tcp传图片 有时出现错误
本帖最后由 t8565841 于 2015-01-01 19:27:18 编辑
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();}

------解决思路----------------------
你比较一下,是不是文件末尾不同,这种情况一般都是到文件末尾时容易出错
------解决思路----------------------
                                    while (length > 0)
                                    {
                                        send = fs.Read(image,send , length );                             
                                        length  = length - send ;
                                    }
这种代码, image 内容一遍遍被覆盖,有什么意义啊?

如果你要把 fs 内容“一次性地”写出去,你应该首先缓存起来,例如使用 MemoryStream,(按照你的格式)先入数据长度再写入文件内容,然后使用 MemoryStream.ToArray() 方法获得要写出去的 image 内容。
  相关解决方案