Данные остаются в 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. Может быть, вы просто не заметили ошибку.
Если я не угадал ошибку (пришлось угадывать, потому что здесь недостаточно информации, чтобы найти ее), то вам, вероятно, следует использовать отладчик, чтобы просмотреть вашу проблему и выяснить, в чем дело.