Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.03.2014, 12:52   #1
spirit-ua
Форумчанин
 
Аватар для spirit-ua
 
Регистрация: 04.06.2009
Сообщений: 351
По умолчанию Socket Already in Use (error 10048)

Всем Привет!

Извиняюсь, может не в тот раздел но, я так думаю, проблема с компонентом так что тема в этом разделе...

С помощью IdHTTP (Delphi 7 с родной Indy) шлю POST-запросы (обновление записи) на веб-сервер IdHTTP.Port=80 (без указания порта тоже пробовал одинаково).
Все вроде бы работает нормально, запрос/ответ, запрос/ответ.

Попробовал потестировать надежность, зарядил в цикл подряд 100 запросов - отлично отработало.

Зарядил 1 000 вылетаю примерно на 880-й итерации (Socket Error 10048 Socket Already in Use)

Ставил sleep - результат тот же

возможно код неграмотный
Код:
   for i:=1 to rec_count do
     begin
       try
         HTTP_ASD := TidHTTP.Create(nil);
         HTTP_ASD.REQUEST;

         HTTP_Res := ''; POST_Info.Clear;

         POST_Info.Add('command=RECORD_UPDATE');
         POST_Info.Add('record_number=' + IntToStr(i));
         ... // + еще около 30 переменных
         HTTP_Res := HTTP_ASD.Post(HOST_Main + HOST_File, POST_Info);
         finally
           sRichEdit1.Lines.Add(HTTP_Res);
           sProgressBar1.Position := sProgressBar1.Position + 1;
           HTTP_ASD.Free;
         end;
     end;
В таблице необходимо обновить около 2 000 записей (по 30 полей), отсюда столько запосов.

Можно ли отправить одним POST запросом "все" переменные (2.000*30=60.000) чтоб не использовать цикл?

Подскажите где что поправить и привести код в "правельный"
Мне разрешено открывать только одну страницу - about :blank. Сперва было скучно, но потом я втянулся. Теперь у меня там живет 2 виртуальных друга, и я слышу голоса из розетки!

Последний раз редактировалось spirit-ua; 05.03.2014 в 13:48.
spirit-ua вне форума Ответить с цитированием
Старый 05.03.2014, 17:40   #2
spirit-ua
Форумчанин
 
Аватар для spirit-ua
 
Регистрация: 04.06.2009
Сообщений: 351
По умолчанию

а что никто не подскажет?
Мне разрешено открывать только одну страницу - about :blank. Сперва было скучно, но потом я втянулся. Теперь у меня там живет 2 виртуальных друга, и я слышу голоса из розетки!
spirit-ua вне форума Ответить с цитированием
Старый 05.03.2014, 18:06   #3
-=Virus=-
Форумчанин
 
Аватар для -=Virus=-
 
Регистрация: 03.07.2009
Сообщений: 246
По умолчанию

Отправляй частями.
-=Virus=- вне форума Ответить с цитированием
Старый 05.03.2014, 18:11   #4
spirit-ua
Форумчанин
 
Аватар для spirit-ua
 
Регистрация: 04.06.2009
Сообщений: 351
По умолчанию

Цитата:
Сообщение от -=Virus=- Посмотреть сообщение
Отправляй частями.
это как? делать "передышку" (sleep) между блоком итераций или паковать в более "жирные" пакеты по N записей в оном запросе?
Мне разрешено открывать только одну страницу - about :blank. Сперва было скучно, но потом я втянулся. Теперь у меня там живет 2 виртуальных друга, и я слышу голоса из розетки!
spirit-ua вне форума Ответить с цитированием
Старый 05.03.2014, 20:39   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Я не пойму зачем в цикле создавать каждый раз объект TidHTTP...
Смысл? Вынеси его за пределы цикла
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 06.03.2014, 10:03   #6
spirit-ua
Форумчанин
 
Аватар для spirit-ua
 
Регистрация: 04.06.2009
Сообщений: 351
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Я не пойму зачем в цикле создавать каждый раз объект TidHTTP...
Смысл? Вынеси его за пределы цикла
Само собой, уже вынес, но ошибка осталась... как победить?
Мне разрешено открывать только одну страницу - about :blank. Сперва было скучно, но потом я втянулся. Теперь у меня там живет 2 виртуальных друга, и я слышу голоса из розетки!
spirit-ua вне форума Ответить с цитированием
Старый 06.03.2014, 10:17   #7
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

использовать GET метод вместо POST, или иной механизм ожидания(TEvent из SyncObjs к примеру) получения ответа.

POST метод - асинхронный, потому HTTP не ждет данных и цикл бежит дальше, вследствии чего нарывается на ошибку.
Человек_Борща вне форума Ответить с цитированием
Старый 06.03.2014, 10:25   #8
spirit-ua
Форумчанин
 
Аватар для spirit-ua
 
Регистрация: 04.06.2009
Сообщений: 351
По умолчанию

Цитата:
Сообщение от Человек_Борща Посмотреть сообщение
использовать GET метод вместо POST, или иной механизм ожидания(TEvent из SyncObjs к примеру) получения ответа.

POST метод - асинхронный, потому HTTP не ждет данных и цикл бежит дальше, вследствии чего нарывается на ошибку.
А GET позволит передать строку (переменную) свыше 255 символов и вообще есть ли ограничения на значение длины переменной, строки и кол-во переменных?
Мне разрешено открывать только одну страницу - about :blank. Сперва было скучно, но потом я втянулся. Теперь у меня там живет 2 виртуальных друга, и я слышу голоса из розетки!
spirit-ua вне форума Ответить с цитированием
Старый 06.03.2014, 10:39   #9
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Сообщение от Человек_Борща Посмотреть сообщение
использовать GET метод вместо POST, или иной механизм ожидания(TEvent из SyncObjs к примеру) получения ответа.

POST метод - асинхронный, потому HTTP не ждет данных и цикл бежит дальше, вследствии чего нарывается на ошибку.
как давно пост асинхронным стал?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 06.03.2014, 10:41   #10
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Цитата:
как давно пост асинхронным стал?
GET - запрос с ожиданием ответа
POST - запрос без ожиданияответа
нет? Вроде так всегда было...
Человек_Борща вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
socket error 10053 DELPHI161 Работа с сетью в Delphi 4 07.06.2013 18:03
socket error 10053 DELPHI161 Работа с сетью в Delphi 0 05.06.2013 10:15
Socket Error 10060 romeo32russ Работа с сетью в Delphi 1 24.10.2011 11:36
Socket Error 10054 RIO Работа с сетью в Delphi 5 22.09.2009 16:24