|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
21.02.2011, 18:00 | #1 | |
Регистрация: 10.02.2011
Сообщений: 6
|
Повторное соединение (Indy)
Здравствуйте. Парни сильно не пинайте за код я не программист.
Indy 10.5.7 Цитата:
Все в принципе делается правильно-авторизировались, послали, приняли нужные нам данные, ниже по программе, записываем данные в listbox2, перешли на новый e-mail и все повторяется пока не закончился список. Допустим у нас в списке 100 строк с e-mail. Но почему-то необрабатывается весь список. Скажем 10 или 20 e-mail обработалось в listbox2 нужное нам записалось и все. Пишет list index out of bounds (ну и строку на которой все закончилось) Думаю или прокси или сайт скажем так посылает меня. Я сделал конструкцию try except и прописывал в нем flag специально чтобы при исключительных ситуациях (таких как пропажа связи) снова пытаться отправить или принять запрос к(от)) сервера. Но не очень то и помогает. Я может быть сумбурно все описал. Но главный вопрос (помимо того где у меня может быть ошибка) вот в чем: Как при работе с сетью и использую Indy повторно посылать данные на сервер. Если он отверг запрос или разорвал связь, повторять запросы пока он не ответит (пусть час два он молчит но главное попытки связатся с ним выполнялись чтобы). Будут благодарен если кто-нибудь знающий приведет пример. Вроде бы нашел причину, пока тестирую. Убрал блок try finally. Все что было в нем вставил после strpage := StreamToText(M); получилось так: Http.Get('http://ya.ru/', M); strpage := StreamToText(M); Data.Free; M.Clear; FreeAndNil(M); flag:=true; except flag:=false; end; добавил еще connectiontimeout=10 сек и если ловлю исключение то как и выше flag=false и пытаюсь снова соедин-я и выполнять прием передачу запросов. Вот еще пару вопросов возникло. Если я скажем отключу интернет сработает блок try except и программа будет пытаться отправлять и принимать запросы повторно. В это время Форма как бы зависает. Можно как то этого как-то избежать, а то может показаться что программа тупо зависла. И второй вопрос как корректно закрыть программу когда она работает. Если жму на крестик закрытия программы ничего не происходит-обработка как шла так и идет. Последний раз редактировалось palm; 21.02.2011 в 20:26. |
|
22.02.2011, 14:23 | #2 |
Подтвердите свой е-майл
Регистрация: 05.04.2010
Сообщений: 76
|
По воду обработки email адресов помочь не могу...попробуй поработь с отладчиком может и найдёшь ошибку. А на счёт того чтобы программа не зависала нужно использовать потоковые объекты (TThread object). Для того чтобы закрыть корректно программу нужно использовать Application.Terminate;
|
22.02.2011, 16:05 | #3 | |
Регистрация: 10.02.2011
Сообщений: 6
|
Цитата:
По поводу потоков я вкурсе, но пока для меня это тяжко в них разобраться ) По поводу закрытия программы: Вот жму я на крестик закрытия программы, какое событие мне надо обработать, куда включать Application.Terminate, чтобы все действия в программе остановились и она корректно и без выдачи ошибки закрылась? |
|
23.02.2011, 15:49 | #4 | |
Форумчанин
Регистрация: 03.04.2009
Сообщений: 305
|
Здравствуйте. Если не хотите работать с потоками, то попробуйте кинуть на форму IdAntiFreeze.
Цитата:
|
|
24.02.2011, 21:06 | #5 |
Регистрация: 10.02.2011
Сообщений: 6
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
программно разорвать соединение на сервере Indy | мандарин | Работа с сетью в Delphi | 3 | 19.04.2015 02:18 |
Повторное нажатие Enter | _-Re@l-_ | Общие вопросы Delphi | 10 | 28.01.2011 23:48 |
повторное воспроизведение wav | romlo | Мультимедиа в Delphi | 4 | 03.01.2011 04:02 |
Indy соединение и Виртуальная сеть | Deman005 | Работа с сетью в Delphi | 19 | 15.04.2010 21:43 |