首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SslStream等价于TcpClient.Available?

SslStream等价于TcpClient.Available?
EN

Stack Overflow用户
提问于 2011-07-13 22:15:26
回答 1查看 2.6K关注 0票数 9

根据@Len in this question的建议,我异步请求0字节读取,在回调中,接受具有同步读取的可用字节,因为我知道数据是可用的,不会阻塞。这看起来很有效率也很棒。

但是,我为SslStream添加了选项,这个方法就崩溃了。零字节读取是可以的,但是SslStream解密字节,在TcpClient的缓冲区中留下一个零字节计数(适当地是这样),而且我无法确定SslStream中现在有多少字节可供读取。

,这里有一个简单的技巧吗?

一些代码,仅用于上下文:

代码语言:javascript
复制
sslStream.BeginRead(this.zeroByteBuffer, 0, 0, DataAvailable, this);

在EndRead() (正确返回0 )之后,DataAvailable包含:

代码语言:javascript
复制
// 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等等。我不想被异步地逐字节读取!

EN

回答 1

Stack Overflow用户

发布于 2014-09-30 11:34:19

如果我正确理解,您的消息是由某个字符分隔的,并且您已经在使用StringBuilder来处理当消息被分割成多个部分时的情况。

您可以考虑在读取数据时忽略分隔符,在数据可用时向其添加任何数据,然后检查本地StringBuilder中的分隔符字符。找到后,可以使用sb.ToString(0, delimiterIndex)sb.Remove(0, delimiterIndex)提取单个消息,直到没有分隔符。

这也适用于同时接收两条消息的情况。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6686356

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档