通过 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 个字节留在流中。
我的目标是使用 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 个字节留在流中。