Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

размер не прочитанных даных в INDY [D7, WinXP]


Wapo ©   (2006-10-09 17:07:00) 

У меня при работе приложения возникает следующая сиуация.

сервер отправил клиенту неопределенного размера данные а клиент получил их. Затем произошло отключение. Со стороны клиента эти данные не нужны, как их просто очистить в буфере компонента. А то связь не отключается пока не прочитаны все данные из буфера. пробывал использовать readLn(). Но тут озникла такая ситуация в корой сервер отключается и данные не посылает. А клиент ждет их, но связи уже нет. И приложение зависает.

Подскажите как решить эту проблему или ответьте на два вопроса
1) Как узнать сколько (размер) в потоке осталось непрочианных данных
2) Как очистить этот поток (буфер)???


Eraser   (2006-10-09 21:25:00) [1]

> [5] Wapo ©   (09.10.06 20:01)


> имееся ввиду то что я хочу просто удалить данные находящиеся
> в буфере, а работу компонента прерывать не хочу. Ну или
> просто пропустить определенное кол-во бит. Ну как в файле,
> перепрыгнуть с одой позиции на другую.

единственный выход - считать эти данные и тут же удалить.. не пойму в чем трудности.

> Какой тип исключения обрабатывается методом catch () при
> ошибках и исключения в Indy?

в справке все есть. насчет исключений в BC++ я хоть и имею общее представление, но очень уж оно общее, и чтобы тебя не вводить в заблуждение - промолчу. не сложно там.


Wapo   (2006-10-09 20:01:00) [2]

"просто сбросить их"

имееся ввиду то что я хочу просто удалить данные находящиеся в буфере, а работу компонента прерывать не хочу. Ну или просто пропустить определенное кол-во бит. Ну как в файле, перепрыгнуть с одой позиции на другую.

а что говорит по этому поводу гугл и справка?

ничего не нашел, примеры для Delphi написаны на сайте INDY.
Какой тип исключения обрабатывается методом catch () при ошибках и исключения в Indy?


Eraser   (2006-10-09 19:45:00) [3]

> [3] Wapo ©   (09.10.06 19:28)


> Для того что бы удалить полученные данные нужно их дочитать
> полностью, но при этом нет такой возможности как узнать
> сколько осталось этих данных или просто сбросить их?

все зависит от прикладного протокола. обычно размер блока данных передается непосредственно перед самими данными.
что значит "просто сбросить их"?

> И второй вопрос, как обработать исключение в С++ Bulder?
>

а что говорит по этому поводу гугл и справка?


Wapo   (2006-10-09 19:28:00) [4]

Позволь уточнить, правильно ли я понял.
Для того что бы удалить полученные данные нужно их дочитать полностью, но при этом нет такой возможности как узнать сколько осталось этих данных или просто сбросить их? Что то это слабое место какое то на мой взгляд. Не должно быть так.

И второй вопрос, как обработать исключение в С++ Bulder? Может кто знает.


Eraser   (2006-10-09 18:49:00) [5]

> [0] Wapo ©   (09.10.06 17:07)


> сервер отправил клиенту неопределенного размера данные а
> клиент получил их. Затем произошло отключение.

для чтения неопределенного размера данных используй
IdTCPClient1.IOHandler.ReadStream(Stream, -1, true);, где Stream - любой поток данных, поддерживающий запись в себя.

> Со стороны клиента эти данные не нужны, как их просто очистить
> в буфере компонента.

просто удали поток, в который считал данные
Stream.Free; // или Clear

> А то связь не отключается пока не прочитаны все данные из
> буфера

так и должно быть!

> Но тут озникла такая ситуация в корой сервер отключается
> и данные не посылает. А клиент ждет их, но связи уже нет.
> И приложение зависает.

в таком случае, через установленный промежуток времени, возникнет исключение, которое нужно обработать.


Wapo   (2006-10-09 17:33:00) [6]

Уточню немного вопрос. использую indy 10 и компонент IdTCPClient.


Наверх

Титульная страница Поиск, карта сайта Написать письмо