根据@Len-Holgate在这个问题中的建议,我异步请求 0 字节读取,并在回调中接受字节同步读取的可用字节,因为我知道数据可用并且不会阻塞。这看起来如此高效和美妙。
但是后来我添加了 SslStream 的选项,这种方法就分崩离析了。零字节读取很好,但是 SslStream 解密字节,在 TcpClient 的缓冲区中留下零字节数(适当地如此),我无法确定 SslStream 现在有多少字节可供读取。
有一个简单的技巧吗?
一些代码,仅用于上下文:
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 等。我不想逐字节地异步读取!