读取后数据仍保留在SslStream中

时间:2013-09-03 11:48:20

标签: .net networking sslstream

我正在开发一种点对点软件,它使用.net的SslStream进行安全通信。

我使用BeginRead()和EndRead()以异步方式从流中读取数据。 (不要太介意奇怪的回调方法......它来自我现在必须使用的框架)

while(Config.State < Config.State.Exit)
{

    association.SslStream.BeginRead(
                InputBuffer,
                InputBufferOffset,
                InputBuffer.Length - InputBufferOffset,
                iarPort.Post,
                null);

    yield return Arbiter.Receive(false, iarPort, iar =>
            {
                try
                {
                    bytesReceived = association.SslStream.EndRead(iar);
                }
                catch
                {
                    bytesReceived = 0;
                }
            });

// process data

}

客户端将处理收到的数据并重新开始阅读。如果远程客户端尚未发送新数据,则接收客户端将再次读取旧数据。因此,数据在读取后仍保留在SslStream中。

有没有办法告诉客户他已经读过这些数据?

1 个答案:

答案 0 :(得分:1)

数据在读取后不会保留在流中。如果是那将是一个严重的错误。这是不可能的,我宁愿先看看我自己的代码。

你可能在某种程度上滥用了这个流。也许您在byte []缓冲区中看到旧数据,因为您的代码不尊重bytesReceived值。或者有一个错误,你在catch子句中被抑制了。也许你只是没有注意到错误。

如果我没有猜到这个错误(不得不猜测因为这里找不到足够的信息)那么你应该使用调试器来解决你的问题并找出问题所在。