1 回答

TA貢獻(xiàn)1795條經(jīng)驗(yàn) 獲得超7個贊
我不熟悉 C# 但如果我正確理解了您的代碼和ReadC# 中的語義(這似乎與readC 中的相似),那么問題是您一次又一次地使用相同的緩沖區(qū)而沒有先重置它:
byte[] buffer = new byte[blockLengthInt];
int totalBytesRead = 0;
while (totalBytesRead != blockLengthInt) {
int length = blockLengthInt - totalBytesRead;
int bytesRead = _receiverHelper.HasData ? _receiverHelper.Read(buffer, 0, length) : _request.ClientStream.Read(buffer, 0, length);
...
totalBytesRead += bytesRead;
...
yield return buffer;
}
舉例說明這里出了什么問題:假設(shè)塊大小為 10,您讀取的內(nèi)容是0123456789,第一次讀取將返回 6 個字節(jié),第二次讀取剩余的 4 個字節(jié)。在這種情況下,您的緩沖區(qū)將012345在第一次讀取567845之后和第二次讀取之后。這些45在緩沖區(qū)末尾量與上一讀,因?yàn)槟阒皇侨〈司彌_區(qū)中的第4個字節(jié),但保留了休息。
奇怪的是,如果我將請求交給另一個 TCPStream 代理(127.0.0.1:8888 作為代理,它是提琴手),它工作得非常好......
Fiddler 是一個代理,可能會改變響應(yīng)的傳輸方式。例如,它可能使用Content-length分塊編碼而不是分塊編碼,或者它可能使用較小的塊,以便您始終在第一次讀取時獲得完整的塊。
- 1 回答
- 0 關(guān)注
- 174 瀏覽
添加回答
舉報(bào)