在从浏览器(大小大于2KB)接收Multipart数据时,我开始在我使用的前几个块之后接收空'\ 0'字节:
void* oof(Test* t);
但是,如果我将ContentLength分成小缓冲区(每个大约2KB) AND 在每次调用Read()后添加1ms的延迟,那么它可以正常工作:
_Stream.Read(ByteArray, Offset, ContentLength);
但是,增加延迟非常缓慢。如何防止读取空字节。我怎么知道浏览器写了多少字节。
由于
答案 0 :(得分:2)
实际上没有收到0x00
字节,它们从未被写入。
Stream.Read()
返回实际读取的字节数,在您的情况下通常小于BufferSize
。少量数据通常在单个消息中到达,在这种情况下不会发生问题。
延迟可能"工作"在您的测试场景中,因为那时网络层缓冲了超过BufferSize
个数据。它可能会在生产环境中失败。
因此,您需要将代码更改为:
int remaining = ContentLength;
int offset = 0;
while (remaining > 0)
{
int bytes = _Stream.Read(ByteArray, offset, remaining);
if (bytes == 0)
{
throw new ApplicationException("Server disconnected before the expected amount of data was received");
}
offset += bytes;
remaining -= bytes;
}