您好,欢迎来到[编程问答]网站首页   源码下载   电子书籍   软件下载   专题
当前位置:首页 >> 编程问答 >> .NET >> c#tcp传图片 有时出现错误

c#tcp传图片 有时出现错误

来源:网络整理     时间:2016/5/21 19:16:11     关键词:tcp,错误

关于网友提出的“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

相关图片

相关文章