我使用下面的Async方法从服务器获取响应。我从服务器获得的响应根据请求类型从1200到1500字节不等。所以,我无法修复缓冲区的大小。
是否有任何方法从SslStream.ReadAsync
获取原始字节的长度?
byte[] Buffer = new byte[1500];
await _sslStream.ReadAsync(Buffer, 0, Buffer.Length);
我尝试使用以下代码,但获得例外说法:
此流不支持搜索操作。
await _sslStream.ReadAsync(Buffer, 0, (int)_sslStream.Length);
之前,我使用了BeginRead
/ EndRead
。有了这个我得到缓冲区的原始大小,但Async await看起来更干净。所以,我想检查是否可以使用ReadAsync
来获取长度。
答案 0 :(得分:3)
例外说清楚:
此流不支持搜索操作。
首先,我无法理解为什么你不能使用更大的缓冲区:
byte[] Buffer = new byte[1500];
await _sslStream.ReadAsync(Buffer, 0, Buffer.Length);
如果流缓冲区可以容纳的数据较少,则只加载部分缓冲区。也许你不知道,但你可以得到读取字节的值:
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字节)。