![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
TspClient и TspServever [D7, XP]
kostyl_kostyl © (2009-08-12 12:38:00)Добрый день. Прошу показать пример обмена сообщениями сервера и клиента с помощью этих компонентов. У меня не выходит.
Я пишу:
procedure TForm1.TcpServer1Accept(Sender: TObject;
ClientSocket: TCustomIpClient);
begin
TcpServer1.Sendln('Ответ');
end;
//-----
if TcpClient.Connect then
begin
TcpClient.Sendln('Запрос');
Response := TcpClient.Receiveln;
ShowMessage(Response);
end
else
ShowMessage('Нет ответа');
TcpClient.Disconnect;
В лучшем случае выдает пустую строку. В худшем зависает на Response := TcpClient.Receiveln;. Помогите разобраться.
Заранее благодарю.
Dennis I. Komarov (2009-08-12 18:16:00) [81]А [24] для кого написано? Для Гоголя?
kostyl_kostyl (2009-08-12 18:10:00) [82]Это идеальный вариант. Дело в том что я не знаю как не заставлять приложение ждать ответа и выполнять другие функции.
Dennis I. Komarov (2009-08-12 18:09:00) [83]
> Я хочу отправить запрос и получить ответ тут же, потому
> что приложению для дальнейшей работы надо знать результат.
> Но сервер довольно долго обрабатывает запрос.
Какой ты хочешь "тут же" получить ответ от сервера, если он будет готов через "довольно долго"?
Или совсем клиника, или я не знаю что это...
kostyl_kostyl (2009-08-12 18:05:00) [84]
> Ты его сам то читал?
Я вас не пойму, что вы хотите услышать от человека, который не знает механизма работы?
Dennis I. Komarov (2009-08-12 18:03:00) [85]Ты его сам то читал?
kostyl_kostyl (2009-08-12 17:54:00) [86]Задача озвучена в:
> kostyl_kostyl (12.08.09 17:25) [65]
или надо еще подробнее?
kostyl_kostyl (2009-08-12 17:36:00) [87]ну у меня сейчас установлен на клиенти bmBlocking, а не сервере bmThreadBlocking
Dennis I. Komarov (2009-08-12 17:36:00) [88]
> Сергей М. © (12.08.09 17:31) [67]
Может лучше сперва озвучить задачу, для чего весь этот бред, а уже потом...
Сергей М. (2009-08-12 17:31:00) [89]
> не знаю какой мне использовать
Оба режима имеют свои преимущества и недостатки в конкретных программных условиях использования.
Остановись пока на каком-либо одном и будем его рассматривать в лупу.
По умолчанию, если мне не изменяет память, устанавливается режим bmMonBlocking.
Dennis I. Komarov (2009-08-12 17:28:00) [90]
> kostyl_kostyl (12.08.09 17:25) [65]
Самому не смешно?
kostyl_kostyl (2009-08-12 17:25:00) [91]Дело в том что я и не знаю какой мне использовать. Я хочу отправить запрос и получить ответ тут же, потому что приложению для дальнейшей работы надо знать результат. Но сервер довольно долго обрабатывает запрос. Вот я из этого и исхожу.
Dennis I. Komarov (2009-08-12 17:23:00) [92]
> не сподобился уточнить используемый тобой режим
Как он его выберет, если он не знает разницу?
> kostyl_kostyl (12.08.09 17:15) [62]
А чего не весь модуль то? Чего ты этим хочешь сказать? Зачем ты приводишь сдесь функции, которые ты не используешь?
Сергей М. (2009-08-12 17:19:00) [93]
> Как зависит?
Алгоритмы "ожидания" и "попыток" существенно отличаются.
При bmNonBloking логика одна, а при bmBlocking иная.
Но ты до сих пор не сподобился уточнить используемый тобой режим, а это весьма важно, если хочешь дальнейшего детального обсуждения.
kostyl_kostyl (2009-08-12 17:15:00) [94]
> Dennis I. Komarov © (12.08.09 17:08) [60]
function TBaseSocket.PeekBuf(var Buf; BufSize: Integer): Integer;
begin
Result := ErrorCheck(recv(FSocket, buf, bufsize, MSG_PEEK));
end;
> Все зависит от режима BlockMode
Как зависит?
Сергей М. (2009-08-12 17:10:00) [95]
> ему надо делать попытки чтения все 10 минут правильно?
Все зависит от режима BlockMode
Dennis I. Komarov (2009-08-12 17:08:00) [96]
> Так ему надо делать попытки чтения все 10 минут правильно?
Да тех пор, пока не прочитает то что нужно или не отвалится по таймауту
> а это не в моем коде...
И какого оно тут оказалось тогда? Телепаторы тестируешь?
kostyl_kostyl (2009-08-12 16:58:00) [97]
> рабатыванию которого волен закрыть соединение по своей инициативе.
Так ему надо делать попытки чтения все 10 минут правильно?
> я не видел этого в твоем коде
а это не в моем коде...
Anatoly Podgoretsky (2009-08-12 16:45:00) [98]> kostyl_kostyl (12.08.2009 16:32:54) [54]
Ну это дело клиента ждать или нет.
Сергей М. (2009-08-12 16:44:00) [99]
> Ка должен вести себя клиент если от послал запрос и хочет
> его получить в течение 10 минут не более
Он должен запустить тем или иным образом какой-либо 10-минутный таймер, по срабатыванию которого волен закрыть соединение по своей инициативе.
> для пользователя клиента это все должно быть прозрачно
Что значит "прозрачно" ?
> пользователь же ждет пока приложение получит ответ
Если ему больше нечем заняться, то да - пусть себе ждет.
Разве в этом есть нечто непотребное ?
Dennis I. Komarov (2009-08-12 16:37:00) [100]
> Ну пользователь же ждет пока приложение получит ответ.
Ну и в чем заключается прозрачность для него? И потом, ты сперва разберись с одним, а потом уже про пользователя вспомнать будешь, какую он музыку будет слушать, пока твой сервер надрывается...