gpt4 book ai didi

c# - NetworkStream 缺失数据

转载 作者:太空狗 更新时间:2023-10-30 01:24:14 25 4
gpt4 key购买 nike

有问题的数据是一个 PNG 文件,前缀为 int 大小。

-Sending:
ns.Write(BitConverter.GetBytes((int)data.Length),0,4);
ns.Write(data, 0, data.Length);

-Reading:
byte[] sizearray = new byte[4];
ns.Read(sizearray, 0, 4);
int dataSize = BitConverter.ToInt32(sizearray,0);

byte[] data = new byte[dataSize];
ns.Read(data, 0, dataSize);

然后将收到的数据保存到一个文件中。我也用 BeginRead/EndRead 尝试过,结果相同。

问题是,虽然这适用于大多数较小的图像,但它不会接收超过几 KB 的图像。 dataSize 读取正确,但每次读取几千字节后(~2900),接收到的数据的其余部分为 0。Example

我是不是忽略了什么,比如一次可以发送多少的限制?

最佳答案

您忽略了 Read 的返回值。不要那样做。 Read 不会等到它读取了您请求的所有 数据。您应该循环阅读,直到您阅读了所需的所有内容:

byte[] data = new byte[dataSize];
int index = 0;
while (index < dataSize)
{
int bytesRead = ns.Read(data, index, dataSize - index);
if (bytesRead <= 0)
{
// Or whatever exception you want
throw new InvalidDataException("Premature end of stream");
}
index += bytesRead;
}

理论上,即使在读取 dataSize 时,您也需要执行相同的操作,尽管实际上我怀疑一次读取是否会收到少于 4 个字节。

您可能想使用 BinaryReader 环绕流 - 然后您可以使用 ReadInt32ReadBytes,其中 ReadBytes 会为你做循环。 (您仍然需要检查返回值,但这比您自己做要简单。)

关于c# - NetworkStream 缺失数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9995714/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com