Форум: "Сети";
Текущий архив: 2002.04.11;
Скачать: [xml.tar.bz2];
ВнизКак отправить через TClientSocket несколько запросов подряд? Найти похожие ветки
← →
eblade (2002-01-25 18:56) [0]Как отправить через TClientSocket несколько запросов подряд?
← →
Digitman (2002-01-28 09:18) [1]точно так же, как один-единственный
← →
Ghost. (2002-01-28 09:42) [2]И получить назад несколько ответов подряд? :0)
← →
eblade (2002-01-28 10:01) [3]меня интересует вопрос: где нужно отлавливать окончание работы по первому запросу для посылки второго? нужно ли это делать при отсоединении или при записи?
← →
Ghost. (2002-01-28 11:17) [4]Так ты обьясни что за запросы, куда ты их шлешь и че тебе от них надо.. если просто запросы (как можно понять из твоего вороса) так шли скока хочешь
← →
Digitman (2002-01-28 12:21) [5]>eblade
Есть такое понятие - протокол информационного обмена (между клиентом и сервером в дан.случае). Как правило, он подразумевает следующее (если не оговорен механизм асинхронных обратных вызовов сервером клиента):
- если клиент сделал функциональный запрос к серверу (т.е. клиент послал серверу некую инф-цию, по получению которой сервер обязан возвратить клиенту результат ее обработки), то клиент ОБЯЗАН ЖДАТЬ получение этого результата от сервера, и до тех пор (в пределах тайм-аута ожидания), пока результат текущего запроса клиентом не получен, он не имеет права посылать серверу следующий запрос; по получению результата клиент обязан проанализировать его корректность в контексте содержания тек.запроса и разорвать соединение, если ответ некорректен (сервер ответил не тем, что ожидалось) - дальнейшее взаимодействие с сервером бессмысленно : говорят, что "нарушен протокол инф-го обмена".
- если клиент сделал процедурный запрос к серверу (т.е. клиент послал серверу некую инф-цию, по получению которой сервер обязан просто выполнить некую последовательность действий, не возвращая клиенту результата их выполнения), то клиент НЕ ОБЯЗАН ЖДАТЬ получения результата от сервера (его попросту не должно быть), и имеет право посылать серверу следующий запрос.
← →
eblade (2002-01-28 18:45) [6]>Digitman
спасибо за познавательную лекцию :)
теперь буду знать
>Ghost
у меня есть, к примеру массив из трех запросов, которые нужно послать серверу через один TClientSocket клиента, получить результат и обработать его.
Вопрос в том, что и где мне нужно отлавливать после отсылки первого запроса. По идее, в OnRead нужно контроллировать окончание принятия ответа и после этого отсылать новый запрос. Но как это осуществить?
← →
Polevi (2002-01-28 19:33) [7]Тебе необходимо запрос и ответ упаковывать в некую структуру, в которой хранить размер передаваемых данных. Тогда в OnRead ты из сокета читаешь сначала размер данных=N, затем анализируешь количество байт в гнезде - если там данных<N - ждешь или рвешь связь (это уже решай сам). Иначе читаешь N байт и после этого посылаешь следующий запрос.
← →
Polevi (2002-01-28 19:36) [8]PS
Это несколько упрощенный алгоритм, более подробно лень писать :-) Хотя в свое время Digitman © не поленился, рассказывая мне примерно тоже самое, за что большое ему спасибо. Если тебе интересно - пиши мне мылом, я тебе вышлю его урок - он у меня где то сохранен..
Страницы: 1 вся ветка
Форум: "Сети";
Текущий архив: 2002.04.11;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.006 c