根据@Len-Holgate在这个问题中的建议,我正在异步请求0字节读取,在回调函数中使用同步读取接受可用字节,因为我知道数据已经准备好且不会阻塞。这似乎非常高效和美妙。
但是当我添加SslStream选项时,这种方法就失败了。零字节读取很好,但SslStream解密字节后,在TcpClient的缓冲区中留下零字节计数(适当地),我无法确定现在有多少字节可供读取。
是否有一种简单的解决办法?
以下是一些代码,仅供参考:
sslStream.BeginRead(this.zeroByteBuffer, 0, 0, DataAvailable, this);
在EndRead()之后(正确返回0),DataAvailable包含:
// by now this is 0, because sslStream has already consumed the bytes
available = myTcpClient.Available;
if (0 < available) // Never occurs
{
// this part can be distractingly complicated, but
// it's based on the available byte count
sslStream.Read(...);
}
由于协议的原因,我需要逐字节评估并解码可变宽度Unicode等内容。我不想异步地逐字节读取!