所以我在做什么:
int blockLength;
try {
blockLength = Convert.ToInt32(line, 16);
} catch (Exception ex) {
if (ex is FormatException || ex is OverflowException) {
throw new Exception("WrongChunkedBlockLength", ex);
}
throw;
}
if (blockLength == 0) {
yield break;
}
(其中line =从流中读取的预期为块长度的行) 这可以正常工作,但是无论出于什么原因,我都会返回一个小于实际块大小的值。我的意思是,我向Hotels.com发送请求,当我获得“块大小”,然后从流中读取块大小作为长度/计数的数据时,它将读取所有内容,但实际上还有更多数据读取该块。 由于该代码现在认为自己已读取完整的块,因此它会循环以继续下一个块,以仅被第一个块数据击中。
这是即时通讯从流中读取的方式:
int totalBytesRead = 0;
byte[] buffer = new byte[blockLength];
while (totalBytesRead < blockLength) {
int read = stream.Read(buffer, totalBytesRead, blockLength);
if (read == 0) {
WaitData();
continue;
}
totalBytesRead += read;
}
然后紧接着这就是我要进一步测试问题的方法:
buffer = new byte[90];
while (true) {
stream.Read(buffer, 0, 10);
MessageBox.Show(Encoding.ASCII.GetString(buffer));
}