小编Man*_* R.的帖子

为什么HttpWebResponse会丢失数据?

在另一个问题中,当通过GetResponseStream()从HttpWebResponse读取时,人们得到的数据不完整.

从嵌入式设备读取数据时我也遇到了这个问题,该设备应该向我发送1000个输入的配置,所有32个字节的头部和64个字节*1000都会产生64032个字节的数据.

直接读取响应流只能为我提供前61个半输入的数据,从那里只有零.

版本a)不工作:

int headerSize = 32;
int inputSize = 64;
byte[] buffer = new byte[(inputSize*1000) + headerSize];

HttpWebResponse response = (HttpWebResponse)request.GetResponse();

using (Stream stream = response.GetResponseStream())
{
    if (stream != null)
    {
        stream.Seek(0, SeekOrigin.Begin);
        stream.Read(buffer, 0, buffer.Length);
    }
}

response.Close();
return buffer;
Run Code Online (Sandbox Code Playgroud)

为了使问题可视化,我单独为每个输入配置打印了64个字节.它基本上由40个ascii字符和几个字节组成,表示布尔值和整数值.

版本A)输出:

1/1000 | 46656E7374657220576F686E656E2020202020202020202020202020202020202020202020202020000000000F0EB0AA00008100000001800000100090010020
2/1000 | 42574D20576F686E656E202020202020202020202020202020202020202020202020202020202020000000000F0EB0AA00008100000001800000100091010080
…
61/1000 | 53656E736F72203631202020202020202020202020202020202020202020202020202020202020200000000000000000000010003300000000001000C3010000
62/1000 | 53656E736F7220363220202020202020202020202020202020202020202020200000000000000000000000000000000000000000000000000000000000000000
63/1000 | 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
…
999/1000 | 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
1000/1000 | 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
Run Code Online (Sandbox Code Playgroud)

当我将ResponseStream复制到一个新的MemoryStream时,我可以完全读取所有1000个输入而没有任何损坏的字节.

版本B)完美工作:

(另请参阅/sf/answers/1564823221/,在第一种情况下解决了我的问题)

int headerSize = 32;
int inputSize …
Run Code Online (Sandbox Code Playgroud)

c# stream httpwebresponse

6
推荐指数
1
解决办法
238
查看次数

标签 统计

c# ×1

httpwebresponse ×1

stream ×1