![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как ждать ответа от сокета? [D5, NT4, Win2k, WinXP]
Repeater © (2002-10-30 17:09:00)Такая проблемка. Есть сокет. Я подконектился к хосту и послал данные. Как теперь программно "подождать" до того времени пока сервер не ответит. Тоесть пока сервер не прислал никаких данных программа должна остановится и ждать. А как только данные придут - продолжить свою работу. Можна чисто для винапи, а можно и применительно к TClientSocket.
Repeater (2002-10-30 18:03:00) [1]Спасибо, что подсказал. Но мне нужно организовать диалог по спец протоколу. Тоесть надо что то определенное послать и ждать пока сервер ответит тоже что то определенное. А как я узнаю в OnRead, что серверу в данном конкретном случае посылать? Можно конечно ввести какой либо индикатор и по нему определять что надо посылать. Но это неудобно. Впрочем я уже вроде разобрался. Надо использовать синхронный режим сокета и TWinSocketStream.
Repeater (2002-10-30 17:46:00) [2]Но сервер писал не я. Я его не заставлю что то выводить.
Malder (2002-10-30 17:46:00) [3]Я подконектился к хосту и послал данные. Как теперь программно "подождать" до того времени пока сервер не ответит
Какой-то глупый вопрос. Нисего не делай пока не наступит событие onRead. Вот и все =)
Rob (2002-10-30 17:28:00) [4]Ну... Например, в конец пересылаемых данных с сервера вставляй какую-нибудь последовательность символов и анализируй ответ. Если ожидаемая последовательность "выделена", то делай что надо.:)
Repeater (2002-10-30 17:22:00) [5]Можно и так. Спасибо. Но сдается мне есть здесь более элегантное стандартное решение. Я просто в сокетах не очень пока. Потому хочу поучиться у более осведомленных нежели я.
Rob (2002-10-30 17:18:00) [6]Попробуй после посылки данных запустить таймер. На событии onRead
запоминай ответ сервера в какой-нибудь переменной, которую после посылки данных "обнуляй". По таймеру проверяй ее значение и если оно "отлично от нуля", останавливай таймер и делай что надо.