我正在制作一个程序,通过TCP传输文件块.现在,每次我在最后传输一个文件似乎都没有写入,所以如果我尝试传输图片
at the bottom right there are glitches.
现在,我的第一个想法是,当我读取,传输和写入比缓冲区长度更小的最终块时,我也写了很多零.所以我试着相应地改变最后的缓冲区大小.然后我尝试使用一个只写有HELLO WORLD的小文本文件,但是当我将其写入,然后打开文件时,它是空的.
现在,我的第一个想法是,当我读取,传输和写入比缓冲区长度更小的最终块时,我也写了很多零.所以我试着相应地改变最后的缓冲区大小.然后我尝试使用一个只写有HELLO WORLD的小文本文件,但是当我将其写入,然后打开文件时,它是空的.
这是读取和发送代码,其中范围[0]是第一部分,范围[1]是最后一部分:
byte[] buffer = new byte[DATA_BUFF_SIZE]; using (Stream input = File.OpenRead(file.Path)) { Console.WriteLine("SENT PARTS # "); for (int i = range[0]; i <= range[1]; i++) { Console.Write("PART " + i + ","); if (i == range[1]) { buffer = new byte[input.Length - input.Position]; } input.Position = i * DATA_BUFF_SIZE; input.Read(buffer,buffer.Length); netStream.Write(buffer,buffer.Length); } Console.WriteLine("LENGTH = " + input.Length); }
这是接收和编写代码:
int bytesReceived = 0; int index = partRange.First; int partNum = 0; byte[] receiveBuffer = new byte[BUFF_SIZE]; if (index == partRange.Last) { receiveBuffer = new byte[filetoDownload.Length - index * BUFF_SIZE]; } while ((bytesReceived = netStream.Read(receiveBuffer,receiveBuffer.Length)) > 0) { Console.Write("INDEX:" + index + ","); output.Position = index * BUFF_SIZE; output.Write(receiveBuffer,receiveBuffer.Length); index++; partNum++; if (partNum > (partRange.Last - partRange.First)) { break; } if (index == partRange.Last) { receiveBuffer = new byte[filetoDownload.Length - index * BUFF_SIZE]; } } Console.WriteLine();
我错过了什么?我甚至在客户端和服务器上打印出缓冲区,它是相同的.
任何帮助将不胜感激,谢谢.
解决方法
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。