Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2009.10.25;
Скачать: [xml.tar.bz2];

Вниз

TspClient и TspServever   Найти похожие ветки 

 
kostyl_kostyl   (2009-08-12 15:37) [40]


> Peek at the incoming data. The data is copied into the buffer but is not removed from the input queue


 
Dennis I. Komarov ©   (2009-08-12 15:42) [41]

"Ну и что это за народное творчество..." (С) Матроскин


 
kostyl_kostyl   (2009-08-12 15:51) [42]

так к чему мы пришли? я не понял...


 
Dennis I. Komarov ©   (2009-08-12 15:52) [43]

к [38]...


 
kostyl_kostyl   (2009-08-12 15:56) [44]

ой, могли бы и сказать, а то ломаетесь тут... А вообще спасибо всем кто помогал.


 
Сергей М. ©   (2009-08-12 16:01) [45]


> kostyl_kostyl   (12.08.09 15:37) [40]


Это откуда такое взялось ?

Цитирую фрагмент справки к методу TBaseSocket.ReceiveLn :

Reads delimited lines of data from the socket.

..
Description

Receiveln reads a delimited chunk of data from the socket.  The delimeter cannot be part of the character set.  Receiveln fills the buffer until it reaches the delimeter.


 
Dennis I. Komarov ©   (2009-08-12 16:02) [46]


> могли бы и сказать, а то ломаетесь тут...

Это лишено смысла...


 
Сергей М. ©   (2009-08-12 16:04) [47]


> а то ломаетесь тут


Ну зато ты, видимо, тверже дуба - не cломаешься своей головой подумать и выяснить)


 
kostyl_kostyl   (2009-08-12 16:05) [48]


> Сергей М. ©   (12.08.09 16:01) [45]

Я просто глубже полез...

Кстати, а если у меня сервер очень долго обрабатывает сообщение, он будет все это время "держать" клиента?


 
Сергей М. ©   (2009-08-12 16:20) [49]


> Я просто глубже полез


"Глубже" - это куда ?


> если у меня сервер очень долго обрабатывает сообщение, он
> будет все это время "держать" клиента?


Что значит "держать" ?
Клиент волен в любое время по своему желанию "уйти")


 
Dennis I. Komarov ©   (2009-08-12 16:27) [50]


> "Глубже" - это куда ?

В процессор...


 
kostyl_kostyl   (2009-08-12 16:27) [51]

Не допустим сервер получил запрос и ему минутку надо или больше чтото проделать прежде чем отправить ответ.
Ка должен вести себя клиент если от послал запрос и хочет его получить в течение 10 минут не более, при этом для пользователя клиента это все должно быть прозрачно.


 
Dennis I. Komarov ©   (2009-08-12 16:30) [52]


> хочет его получить в течение 10 минут не более

тогда ждать 10 и потом "уходить"...

> при этом для пользователя клиента это все должно быть прозрачно.

Это как? И он то как тут оказался?


 
kostyl_kostyl   (2009-08-12 16:31) [53]


> Dennis I. Komarov ©   (12.08.09 16:27) [50]

recv(FSocket, buf, bufsize, MSG_PEEK)


 
kostyl_kostyl   (2009-08-12 16:32) [54]


> Это как?

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


 
Dennis I. Komarov ©   (2009-08-12 16:34) [55]


> kostyl_kostyl   (12.08.09 16:31) [53]

Что-то я не видел этого в твоем коде... А вообще генофонд большой, давай еще "глубже"


 
Dennis I. Komarov ©   (2009-08-12 16:37) [56]


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

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


 
Сергей М. ©   (2009-08-12 16:44) [57]


> Ка должен вести себя клиент если от послал запрос и хочет
> его получить в течение 10 минут не более


Он должен запустить тем или иным образом какой-либо 10-минутный таймер, по срабатыванию которого волен закрыть соединение по своей инициативе.


> для пользователя клиента это все должно быть прозрачно


Что значит "прозрачно" ?


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


Если ему больше нечем заняться, то да - пусть себе ждет.
Разве в этом есть нечто непотребное ?


 
Anatoly Podgoretsky ©   (2009-08-12 16:45) [58]

> kostyl_kostyl  (12.08.2009 16:32:54)  [54]

Ну это дело клиента ждать или нет.


 
kostyl_kostyl   (2009-08-12 16:58) [59]


> рабатыванию которого волен закрыть соединение по своей инициативе.

Так ему надо делать попытки чтения все 10 минут правильно?

> я не видел этого в твоем коде

а это не в моем коде...


 
Dennis I. Komarov ©   (2009-08-12 17:08) [60]


> Так ему надо делать попытки чтения все 10 минут правильно?

Да тех пор, пока не прочитает то что нужно или не отвалится по таймауту

> а это не в моем коде...

И какого оно тут оказалось тогда? Телепаторы тестируешь?


 
Сергей М. ©   (2009-08-12 17:10) [61]


> ему надо делать попытки чтения все 10 минут правильно?


Все зависит от режима BlockMode


 
kostyl_kostyl   (2009-08-12 17:15) [62]


> 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:19) [63]


> Как зависит?


Алгоритмы "ожидания" и "попыток" существенно отличаются.
При bmNonBloking логика одна, а при bmBlocking иная.
Но ты до сих пор не сподобился уточнить используемый тобой режим, а это весьма важно, если хочешь дальнейшего детального обсуждения.


 
Dennis I. Komarov ©   (2009-08-12 17:23) [64]


> не сподобился уточнить используемый тобой режим

Как он его выберет, если он не знает разницу?


> kostyl_kostyl   (12.08.09 17:15) [62]

А чего не весь модуль то? Чего ты этим хочешь сказать? Зачем ты приводишь сдесь функции, которые ты  не используешь?


 
kostyl_kostyl   (2009-08-12 17:25) [65]

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


 
Dennis I. Komarov ©   (2009-08-12 17:28) [66]


> kostyl_kostyl   (12.08.09 17:25) [65]

Самому не смешно?


 
Сергей М. ©   (2009-08-12 17:31) [67]


> не знаю какой мне использовать


Оба режима имеют свои преимущества и недостатки в конкретных программных условиях использования.

Остановись пока на каком-либо одном и будем его рассматривать в лупу.

По умолчанию, если мне не изменяет память, устанавливается режим bmMonBlocking.


 
kostyl_kostyl   (2009-08-12 17:36) [68]

ну у меня сейчас установлен на клиенти bmBlocking, а не сервере bmThreadBlocking


 
Dennis I. Komarov ©   (2009-08-12 17:36) [69]


> Сергей М. ©   (12.08.09 17:31) [67]

Может лучше сперва озвучить задачу, для чего весь этот бред, а уже потом...


 
kostyl_kostyl   (2009-08-12 17:54) [70]

Задача озвучена в:

> kostyl_kostyl   (12.08.09 17:25) [65]

или надо еще подробнее?


 
Dennis I. Komarov ©   (2009-08-12 18:03) [71]

Ты его сам то читал?


 
kostyl_kostyl   (2009-08-12 18:05) [72]


> Ты его сам то читал?

Я вас не пойму, что вы хотите услышать от человека, который не знает механизма работы?


 
Dennis I. Komarov ©   (2009-08-12 18:09) [73]


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

Какой ты хочешь "тут же" получить ответ от сервера, если он будет готов через "довольно долго"?

Или совсем клиника, или я не знаю что это...


 
kostyl_kostyl   (2009-08-12 18:10) [74]

Это идеальный вариант. Дело в том что я не знаю как не заставлять приложение ждать ответа и выполнять другие функции.


 
Dennis I. Komarov ©   (2009-08-12 18:16) [75]

А [24] для кого написано? Для Гоголя?


 
kostyl_kostyl   (2009-08-12 18:33) [76]

Постараюсь лучше объяснить:
Вот у меня код обработки ответа:

1.  TcpClient.SendBuf(ClientRequest, 13);
2.  TcpClient.ReceiveBuf(ServerResponse, 268);
3.  TcpClient.Disconnect;
4.  ProcessServerResponse(ServerResponse);

Меня смущает что строки 1 и 2 выполняться в один момент и вижу два бока, когда либо клиент зависнет на строке 2 либо в строке 4 ServerResponse будет неверная информация, потому что сервер долго обрабатывает запрос.


 
kostyl_kostyl   (2009-08-12 20:02) [77]

Я не знаю как будет на самом деле, но знаю что сервер точно сформирует ответ. А вот когда это будет я без понятия, возможно я уже отконнекчусь и он не успеет передать данные. Значит мне надо подождать пока он это сделает, но вот ждать я не могу. Что делать? Может сделать обработку ответа в отдельном потоке, а по приходу ответа изменить какую то глобальную переменную и запусить ProcessServerResponse(ServerResponse)?


 
Сергей М. ©   (2009-08-12 20:22) [78]

А ты вообще в курсе, какой кодовый поток процесса твоего приложения ответственен за GUI ?


 
kostyl_kostyl   (2009-08-12 22:17) [79]

Если честно не в курсе


 
Сергей М. ©   (2009-08-13 08:13) [80]

В VCL-приложении - основной.
И он же, основной поток, у тебя вызывает метод ReceiveLn.
Пока метод не завершит выполнение, осн.поток не будет исполнять свои GUI-обязанности, что и создает иллюзию "подвисания".
Отсюда напрашивается решение: либо переносить работу с TTCPClient в доп.поток (он так же будет "зависать" на время вызова метода, но это не повлияет на работу осн.потока, ибо потоки исполняются "параллельно") либо переводить TTCPClient в режим bmNonBlocking, оставив работу с ним в осн.потоке.



Страницы: 1 2 3 4 вся ветка

Форум: "Начинающим";
Текущий архив: 2009.10.25;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.61 MB
Время: 0.051 c
2-1251711555
Franzy
2009-08-31 13:39
2009.10.25
Как передать в dll адрес процедуры?..


15-1250875581
DillerXX
2009-08-21 21:26
2009.10.25
Аудио системы


2-1251206612
Дмитрий_
2009-08-25 17:23
2009.10.25
TStrngList.AddObject..?


2-1251107698
SkyN
2009-08-24 13:54
2009.10.25
Как отловить причину закрытия программы?


2-1251711913
Tinky
2009-08-31 13:45
2009.10.25
Проверить integer на вхождение во множество





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский