根据@Len in this question的建议,我异步请求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等等。我不想被异步地逐字节读取!
发布于 2014-09-30 11:34:19
如果我正确理解,您的消息是由某个字符分隔的,并且您已经在使用StringBuilder来处理当消息被分割成多个部分时的情况。
您可以考虑在读取数据时忽略分隔符,在数据可用时向其添加任何数据,然后检查本地StringBuilder中的分隔符字符。找到后,可以使用sb.ToString(0, delimiterIndex)和sb.Remove(0, delimiterIndex)提取单个消息,直到没有分隔符。
这也适用于同时接收两条消息的情况。
https://stackoverflow.com/questions/6686356
复制相似问题