Данные остаются в 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 ответ

Решение

Данные не остаются в потоке после его чтения. Если бы это было так, это было бы серьезной ошибкой. Это настолько маловероятно, что я бы сначала посмотрел на свой собственный код.

Возможно, вы неправильно используете поток. Возможно, вы видите старые данные в буфере byte[], потому что ваш код не учитывает bytesReceived значение. Или произошла ошибка, которую вы подавили в предложении catch. Может быть, вы просто не заметили ошибку.

Если я не угадал ошибку (пришлось угадывать, потому что здесь недостаточно информации, чтобы найти ее), то вам, вероятно, следует использовать отладчик, чтобы просмотреть вашу проблему и выяснить, в чем дело.

Другие вопросы по тегам