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

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

TspClient и TspServever [D7, XP]


Страницы:   1 2 3 4 5 6 7 8

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]


> Ну пользователь же ждет пока приложение получит ответ.

Ну и в чем заключается прозрачность для него? И потом, ты сперва разберись с одним, а потом уже про пользователя вспомнать будешь, какую он музыку будет слушать, пока твой сервер надрывается...


Страницы:   1 2 3 4 5 6 7 8

Наверх

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