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

File sent over NetworkStream is received corrupted C#

我的目标是使用 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);
    }
}

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

fileinfo.length 是 long 而不是 int32

问题可能如下:

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

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