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

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

Как отправить через TClientSocket несколько запросов подряд?


eblade ©   (2002-01-25 18:56:00) 

Как отправить через TClientSocket несколько запросов подряд?


Polevi   (2002-01-28 19:36:00) [1]

PS
Это несколько упрощенный алгоритм, более подробно лень писать :-) Хотя в свое время Digitman © не поленился, рассказывая мне примерно тоже самое, за что большое ему спасибо. Если тебе интересно - пиши мне мылом, я тебе вышлю его урок - он у меня где то сохранен..


Polevi   (2002-01-28 19:33:00) [2]

Тебе необходимо запрос и ответ упаковывать в некую структуру, в которой хранить размер передаваемых данных. Тогда в OnRead ты из сокета читаешь сначала размер данных=N, затем анализируешь количество байт в гнезде - если там данных<N - ждешь или рвешь связь (это уже решай сам). Иначе читаешь N байт и после этого посылаешь следующий запрос.


eblade   (2002-01-28 18:45:00) [3]

>Digitman
спасибо за познавательную лекцию :)
теперь буду знать

>Ghost
у меня есть, к примеру массив из трех запросов, которые нужно послать серверу через один TClientSocket клиента, получить результат и обработать его.

Вопрос в том, что и где мне нужно отлавливать после отсылки первого запроса. По идее, в OnRead нужно контроллировать окончание принятия ответа и после этого отсылать новый запрос. Но как это осуществить?


Digitman   (2002-01-28 12:21:00) [4]

>eblade
Есть такое понятие - протокол информационного обмена (между клиентом и сервером в дан.случае). Как правило, он подразумевает следующее (если не оговорен механизм асинхронных обратных вызовов сервером клиента):
- если клиент сделал функциональный запрос к серверу (т.е. клиент послал серверу некую инф-цию, по получению которой сервер обязан возвратить клиенту результат ее обработки), то клиент ОБЯЗАН ЖДАТЬ получение этого результата от сервера, и до тех пор (в пределах тайм-аута ожидания), пока результат текущего запроса клиентом не получен, он не имеет права посылать серверу следующий запрос; по получению результата клиент обязан проанализировать его корректность в контексте содержания тек.запроса и разорвать соединение, если ответ некорректен (сервер ответил не тем, что ожидалось) - дальнейшее взаимодействие с сервером бессмысленно : говорят, что "нарушен протокол инф-го обмена".
- если клиент сделал процедурный запрос к серверу (т.е. клиент послал серверу некую инф-цию, по получению которой сервер обязан просто выполнить некую последовательность действий, не возвращая клиенту результата их выполнения), то клиент НЕ ОБЯЗАН ЖДАТЬ получения результата от сервера (его попросту не должно быть), и имеет право посылать серверу следующий запрос.


Ghost.   (2002-01-28 11:17:00) [5]

Так ты обьясни что за запросы, куда ты их шлешь и че тебе от них надо.. если просто запросы (как можно понять из твоего вороса) так шли скока хочешь


eblade   (2002-01-28 10:01:00) [6]

меня интересует вопрос: где нужно отлавливать окончание работы по первому запросу для посылки второго? нужно ли это делать при отсоединении или при записи?


Ghost.   (2002-01-28 09:42:00) [7]

И получить назад несколько ответов подряд? :0)


Digitman   (2002-01-28 09:18:00) [8]

точно так же, как один-единственный


Наверх

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