我正在使用下面的异步方法从服务器获取响应。根据请求类型,我从服务器获得的响应从 1200 字节到 1500 字节不等。所以,我无法修复缓冲区的大小。
SslStream.ReadAsync
有什么方法可以获取接收到的原始字节的长度吗?
byte[] Buffer = new byte[1500];
await _sslStream.ReadAsync(Buffer, 0, Buffer.Length);
我尝试使用下面的代码,但出现异常:
This stream don't support seek operations.
await _sslStream.ReadAsync(Buffer, 0, (int)_sslStream.Length);
早些时候,我使用了BeginRead
/EndRead
。这样我就得到了缓冲区的原始大小,但 Async await 看起来更干净了。因此,我想检查是否可以使用 ReadAsync
获取长度。
最佳答案
异常清楚地说:
This stream don't support seek operations.
首先,我不明白为什么你不能使用更大的缓冲区:
byte[] Buffer = new byte[1500];
await _sslStream.ReadAsync(Buffer, 0, Buffer.Length);
如果流中的数据少于缓冲区可以容纳的数据,则只会加载缓冲区的一部分。也许你不知道,但是你可以得到read bytes的值:
byte[] Buffer = new byte[1500];
var bytesRead = await _sslStream.ReadAsync(Buffer, 0, Buffer.Length);
然后您可以创建自己的缓冲区,正好适合读取数据的长度:
byte[] bufferThatFitsData = new byte[bytesRead];
Array.Copy(buffer, 0, bufferThatFitsData, 0, bytesRead);
现在,bufferThatFitsData
的长度等于流的大小(假设不超过 1500 字节)。
关于c# - 当您不知道长度时,如何使用 ReadAsync 方法获取从 sslsteam 接收的字节长度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35793049/