0

我正在开发一个点对点软件,它使用 .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 中。

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

4

1 回答 1

1

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

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

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

于 2013-09-03T11:52:37.283 回答