![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как отправить через 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]точно так же, как один-единственный