通过NetworkStream发送的文件收到损坏的C#

时间:2017-11-28 21:11:26

标签: c# filestream file-transfer networkstream

我的目标是使用NetworkStream通过TCP连接发送文件。 我首先发送我要发送的数据的长度,然后我使用文件流和二进制写入器逐字节发送数据。

在调试过程中,我发现在接收端文件的开始处放置了一些“0”字节。 例如,基本文件的内容azertyuiop收到azerty(4个空格替换uiop),导致图像等文件损坏。

到目前为止我得到的代码: (其中br是BinaryReader,bw是BinaryWriter)

发信人:

using (var readStream = new FileStream(fileLocation, FileMode.Open))
{
    // Send the data length first
    bw.Write(new FileInfo(fileLocation).Length);
    bw.Flush();

    var buffer = new byte[1];
    while (readStream.Read(buffer, 0, 1) > 0)
    {
          bw.Write(buffer[0]);
          bw.Flush();
    }
}

接收器:

// Get data length
var dataLength = br.ReadInt32();

using (var fs = new FileStream(newFileLocation, FileMode.Create))
{
    var buffer = new byte[1];
    for(int i = 0; i < dataLength; i++)
    {
        br.Read(buffer, 0, 1);
        fs.Write(buffer, 0, 1);
    }
}

我错过了什么或做错了什么?

2 个答案:

答案 0 :(得分:2)

问题可能如下:

bw.Write(new FileInfo(fileLocation).Length);
...
var dataLength = br.ReadInt32();

Length属性实际上是long类型(8个字节)。但是您正在将值读取为Int32(4个字节),而在流中保留其他4个字节。

答案 1 :(得分:1)

fileinfo.length是一个long而不是int32