Форум: "Сети";
Текущий архив: 2007.03.25;
Скачать: [xml.tar.bz2];
Внизразмер не прочитанных даных в INDY Найти похожие ветки
← →
Wapo © (2006-10-09 17:07) [0]У меня при работе приложения возникает следующая сиуация.
сервер отправил клиенту неопределенного размера данные а клиент получил их. Затем произошло отключение. Со стороны клиента эти данные не нужны, как их просто очистить в буфере компонента. А то связь не отключается пока не прочитаны все данные из буфера. пробывал использовать readLn(). Но тут озникла такая ситуация в корой сервер отключается и данные не посылает. А клиент ждет их, но связи уже нет. И приложение зависает.
Подскажите как решить эту проблему или ответьте на два вопроса
1) Как узнать сколько (размер) в потоке осталось непрочианных данных
2) Как очистить этот поток (буфер)???
← →
Wapo © (2006-10-09 17:33) [1]Уточню немного вопрос. использую indy 10 и компонент IdTCPClient.
← →
Eraser © (2006-10-09 18:49) [2]> [0] Wapo © (09.10.06 17:07)
> сервер отправил клиенту неопределенного размера данные а
> клиент получил их. Затем произошло отключение.
для чтения неопределенного размера данных используйIdTCPClient1.IOHandler.ReadStream(Stream, -1, true);
, где Stream - любой поток данных, поддерживающий запись в себя.
> Со стороны клиента эти данные не нужны, как их просто очистить
> в буфере компонента.
просто удали поток, в который считал данныеStream.Free; // или Clear
> А то связь не отключается пока не прочитаны все данные из
> буфера
так и должно быть!
> Но тут озникла такая ситуация в корой сервер отключается
> и данные не посылает. А клиент ждет их, но связи уже нет.
> И приложение зависает.
в таком случае, через установленный промежуток времени, возникнет исключение, которое нужно обработать.
← →
Wapo © (2006-10-09 19:28) [3]Позволь уточнить, правильно ли я понял.
Для того что бы удалить полученные данные нужно их дочитать полностью, но при этом нет такой возможности как узнать сколько осталось этих данных или просто сбросить их? Что то это слабое место какое то на мой взгляд. Не должно быть так.
И второй вопрос, как обработать исключение в С++ Bulder? Может кто знает.
← →
Eraser © (2006-10-09 19:45) [4]> [3] Wapo © (09.10.06 19:28)
> Для того что бы удалить полученные данные нужно их дочитать
> полностью, но при этом нет такой возможности как узнать
> сколько осталось этих данных или просто сбросить их?
все зависит от прикладного протокола. обычно размер блока данных передается непосредственно перед самими данными.
что значит "просто сбросить их"?
> И второй вопрос, как обработать исключение в С++ Bulder?
>
а что говорит по этому поводу гугл и справка?
← →
Wapo © (2006-10-09 20:01) [5]"просто сбросить их"
имееся ввиду то что я хочу просто удалить данные находящиеся в буфере, а работу компонента прерывать не хочу. Ну или просто пропустить определенное кол-во бит. Ну как в файле, перепрыгнуть с одой позиции на другую.
а что говорит по этому поводу гугл и справка?
ничего не нашел, примеры для Delphi написаны на сайте INDY.
Какой тип исключения обрабатывается методом catch () при ошибках и исключения в Indy?
← →
Eraser © (2006-10-09 21:25) [6]> [5] Wapo © (09.10.06 20:01)
> имееся ввиду то что я хочу просто удалить данные находящиеся
> в буфере, а работу компонента прерывать не хочу. Ну или
> просто пропустить определенное кол-во бит. Ну как в файле,
> перепрыгнуть с одой позиции на другую.
единственный выход - считать эти данные и тут же удалить.. не пойму в чем трудности.
> Какой тип исключения обрабатывается методом catch () при
> ошибках и исключения в Indy?
в справке все есть. насчет исключений в BC++ я хоть и имею общее представление, но очень уж оно общее, и чтобы тебя не вводить в заблуждение - промолчу. не сложно там.
Страницы: 1 вся ветка
Форум: "Сети";
Текущий архив: 2007.03.25;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.044 c