Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.10.13;
Скачать: CL | DM;

Вниз

Подскажите непонятливому!!!! Indy IdTCPClient -   Найти похожие ветки 

 
tes   (2003-08-06 18:29) [0]

Помню раньше были компоненты TServerSocket TClientSocket, у клиента была такая тема как - ClientSocketRead, в Indy такого нет. Если ставить на таймер IdTCPClient.ReadLn то прога быстро уходит в мир иной (полное вислово) :( Подскажите каким образом нужно плучать ответы от IdTCPServer в клиенте. Задолбался уже.


 
Reindeer Moss Eater   (2003-08-07 08:36) [1]

Если ставить на таймер IdTCPClient.ReadLn

Зачем на таймер? Почему не на тормоз?

IdTCPClient.ReadLn без таймера не работает что ли?


 
$hade ©   (2003-08-07 11:29) [2]


> Подскажите каким образом нужно плучать ответы от IdTCPServer
> в клиенте

В отдельном потоке
или
ReadLn("",5) (таймаут 5 мс - практически не тормозит...)
или
точнее даже "и"
кинь на форму компонент IdAntiFreeze



 
test   (2003-08-07 12:58) [3]

Если Вас не затруднит, примерчик пожалйста.


 
Reindeer Moss Smoker (ex-RME) ©   (2003-08-07 13:07) [4]

Начало примера
MyString:=IdTCPClient.ReadLn
Конец примера


 
test   (2003-08-07 13:22) [5]

Reindeer Moss Smoker (ex-RME)

MyString := IdTCPClient.ReadLn - не, у это понятно. Я не про то спрашивал. Вот у старого клиента была такая фишка, как OnClientRead, а в инди на клиенте такого нет. Приходится извращаться. На событии OnConnect - срабатывает всего раз, если по таймеру, то срабатывает как надо, только виснет. Вот чего я спрашивал. Может есть какой вариант, аналогично старому.


 
Reindeer Moss Smoker (ex-RME) ©   (2003-08-07 13:25) [6]

"Старый" клиент имел асинхронные методы, "новый" имеет синхронные.


 
Reindeer Moss Smoker (ex-RME) ©   (2003-08-07 13:26) [7]

Ты сам себе можешь объяснить зачем тебе потребовался таймер?


 
test   (2003-08-07 13:46) [8]

Reindeer Moss Smoker (ex-RME)

Объясняю популярно. Мне нужно получать сообщения от серверной части. Если пользоваться событием OnConnect то получение данных происходит 1 раз, потом все пакеты идуд по извесному адресу (на ...) :( Почему - непонятно. Если ставить получение пакетов по циклу, прога подвисает. Ставить по таймеру, работает чуть дольше, но результат тотже. Если рассмотреть чат, из демо в инди, то можно увидеть, что там используется в качестве цикла на прием данных - таймер. Геморой полный! Для тех, кто не понял мою мысль, привожу ее в другой интерпретации:

В серверной части чтение пакетов происходит по событию OnExecute.
Все работает как надо.

procedure tform1.idtcpserveronexecute;
Begin
With iIdTCPServer Do
Begin
IdTCPServer.ReadLn ("xxx");
// ...
End;
End;

Теперь к клиенту. У него нет никакого события, которое бы постоянно принимало от сервера пакеты. В старом было OnClientRead, в нди нет. По этому нужно ставить цикл. Вариант
With IdTCPClient Do
Begin
ReadStr := IdTCPClient.ReadLn;
End;

не проходит. :( Что делать?


 
Reindeer Moss Eater ©   (2003-08-07 13:50) [9]

Тебе что, просто свой код некуда вставить кроме как в обработчики событий?

Теперь к клиенту. У него нет никакого события, ...
Нет события, потому что оно ему не надо. Серверу надо потому что он многопоточный и обслуживает многих клиентов.
Клиенту это не нужно. Клиент - он один.
Достаточно вызвать метод и получить от сервера данные.
Нужны еще данные, вызови метод еще раз.




 
test   (2003-08-07 13:54) [10]

Reindeer Moss Eater

Утомил. Сервер может посылать мне сообщения в разные промежутки времени. Вопрос: Откуда клиент узнает, что ему прислали пакет? Для этого как я понимаю, нужно ставить обработчик, который будет контролить этот процесс -> возвращаемся туда, откуда пришли. :(


 
Reindeer Moss Eater ©   (2003-08-07 14:02) [11]

Утомил. Сервер может посылать мне сообщения в разные промежутки времени. Вопрос: Откуда клиент узнает, что ему прислали пакет? Для этого как я понимаю, нужно ставить обработчик, который будет контролить этот процесс -> возвращаемся туда, откуда пришли. :(

Соединившись с сервером, клиент должен читать. Прочитав, должен читать снова.



 
Reindeer Moss Eater ©   (2003-08-07 14:04) [12]

Вопрос: Откуда клиент узнает, что ему прислали пакет?

Как только произойдет возврат из метода чтения, так значит "Вам пакет"


 
test   (2003-08-07 14:07) [13]

Reindeer Moss Eater

Слушай, дорогой! Ты меня совсем не понимаешь. То, что ты сказал, это ясно и так. Меня интересует вопрос, как это оформить програмно. Ну -
procedure TForm1.TimerOnTimer;
Begin
Client.ReadLn;
End; - только такой вариант не подходит, виснет. Где ставить цикл или ... ?


 
Reindeer Moss Eater ©   (2003-08-07 14:17) [14]

Дорогой, не нужен таймер.
Пойми сначало это. Потом продолжим.


 
test   (2003-08-07 14:27) [15]

Reindeer Moss Eater

Если тебе не трудно, напиши маленький примерчик, в котором будет показана работа клиента с пакетами.


 
Reindeer Moss Eater ©   (2003-08-07 14:31) [16]

procedure WorkWithServer;
var cStr:string;
begin
while True do
begin
cStr:=IdTCPClient.ReadLn;
if cStr = "go to bed" then Break
else if cStr = "Делай то" then ExeDelayToTo
else if cStr = "Делай cё" then ExeDelaySe
else ExeDoSomethind;
end;
end;


 
Tiny   (2003-08-07 14:39) [17]


> Reindeer Moss Eater © (07.08.03 14:31)

Ну какая разница - пусть в таймере сделает...

Но лучше - отдельный поток


 
$hade ©   (2003-08-07 14:40) [18]

Тьфу! Второй раз такая фигня :-)
Выше я был...


 
Reindeer Moss Eater ©   (2003-08-07 14:44) [19]

Ну какая разница - пусть в таймере сделает...

До меня никак не может дойти смысл применения таймера для вызова синхронных методов. Красота и элегантность этой инженерной мысли никака не постигается мной.


 
$hade ©   (2003-08-07 15:14) [20]

:-))))))))))))))
Понимаешь,действительно сбивает с толку пример вроде как ОТ СОЗДАТЕЛЕЙ INDY - у них там применен таймер....

Хотя все компоненты - наследники (TelnetClinet,HTTP) используют отдельный поток для чтения...

А кстати в твоем примере прога вешатся все же будет...наверное поможет IdAntiFreeze
+
Как ты при этом представляешь себе параллелно к примеру ввод и отправку текста (чат) или другие действия (ведь прога постоянно будет заниматься поппыткой чтения) ?



 
test   (2003-08-07 15:20) [21]

$hade ©

Вот, вот!!! Я ему про это уже который раз пытаюсь сказать. Не понимает и все. Нафига убрали из 7д компоненты. :( Мож кто подскажет, где можно слить старые компоненты?


 
Reindeer Moss Eater ©   (2003-08-07 15:26) [22]

А кстати в твоем примере прога вешатся все же будет...наверное поможет IdAntiFreeze

Откуда такой скоропалительный вывод?



 
Reindeer Moss Eater ©   (2003-08-07 15:28) [23]

Как ты при этом представляешь себе параллелно к примеру ввод и отправку текста (чат) или другие действия (ведь прога постоянно будет заниматься поппыткой чтения) ?


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

Приведен пример работы, а не коммерческая программа с пожизненным сапортом.


 
test   (2003-08-07 15:28) [24]

Reindeer Moss Eater

Вот не поленись и напиши прогу по своему примеру. Потом расскажешь, почему такие выводы люди делают. :)


 
Reindeer Moss Eater ©   (2003-08-07 15:30) [25]

test

Вот не поленись и напиши прогу по своему примеру. Потом расскажешь, почему такие выводы люди делают. :)

Ты представляешь, приятель, написал. И не одну и не сегодня.
И выводов, таких как у тебя, пока никто из пользователей не сделал.


 
Tiny   (2003-08-07 15:32) [26]

2test (07.08.03 15:20)
$hade ©

Вот, вот!!! Я ему про это уже который раз пытаюсь сказать. Не понимает и все. Нафига убрали из 7д компоненты. :( Мож кто подскажет, где можно слить старые компоненты?

гы-) а кто сказал что убрали?? их нет на палитре но они есть :)
bpl-ка лежит в папке belphi/bin...ищи и обретешь...))

2Reindeer Moss Eater © (07.08.03 15:26)
А кстати в твоем примере прога вешатся все же будет...наверное поможет IdAntiFreeze

Откуда такой скоропалительный вывод?

а откуда обратный должен быть?? indy - блок. сокеты - пока не прочитает не пойдет...

а ты сам то пробовал? именно c Indy??


 
test   (2003-08-07 15:33) [27]

Reindeer Moss Eater

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


 
Reindeer Moss Eater ©   (2003-08-07 15:34) [28]

Tiny
откуда вывод, что ПРОГА вешатся все же будет ?


 
test   (2003-08-07 15:35) [29]

Tiny

Сапасибо за наводку, ща поглядим. :)


 
$hade ©   (2003-08-07 15:38) [30]

Удалено модератором


 
$hade ©   (2003-08-07 15:44) [31]

Reindeer Moss Eater © (07.08.03 15:34)
Tiny
откуда вывод, что ПРОГА вешатся все же будет ?

Ну не вешаться - тормозить (извини - не так выразился...)
если ты в основном потоке это сделаешь - на время работы ReadLn
ты ничего не сможешь сделать...а так как по умолчанию таймаут -1
(бесконечно) соответственно будешь ждать пока не прийдут данный или твой конец :-)) (кста - если при этом техонечко вытащить к примеру шнур из модема или сетевухи - конец прийдет быстрее :-)





 
Reindeer Moss Eater ©   (2003-08-07 15:47) [32]

Еще раз для непонятливых. Мной был дан пример работы с сервером.
Не пример программы, а пример чтения данных с сервера.

И как бы кто не ухищрялся, (если методы синхронные) алгоритм будет примерно таким же. Хоть дергай модем, хоть роняй его об стену.


 
test   (2003-08-07 15:48) [33]

Reindeer Moss Eater

Сдаеться мне, что Вы сударь, сами толком ничего не знаете. За весь разговор с Вами, я не получил ни одного конкретного отвела (примера), а только какието попытки доказать, что Вы чтото смыслите в нашей теме. По это делаю вывод, что Вы не компетентны в данном вопросе.

Всем остальным - БОЛЬШРЕ СПАСИБО за то, что не оставили мой вопрос без рассмотрения. Вы мне очень помогли.


 
Reindeer Moss Eater ©   (2003-08-07 15:50) [34]

test
За весь разговор с Вами, я не получил ни одного конкретного отвела

Ты просто не умеешь понимать читаемое.


 
test   (2003-08-07 15:54) [35]

Reindeer Moss Eater

Прочти то, с чего все началось, потом прочти то, что ты ответил.
Вывод -
1. Не умеешь понимать читаемое (это уже относится к тебе).
2. Не умеешь объяснить свою мысль.


 
Reindeer Moss Eater ©   (2003-08-07 15:56) [36]

Да наздоровье.

Только все, что ты спрашивал, это
1. Как читать данные (тебе сказали как)
2. Куда прицепить показанный код.


 
Reindeer Moss Eater ©   (2003-08-07 15:59) [37]

А за всем этим неявный вопрос "Как мне написать мою программу?"


 
test   (2003-08-07 16:02) [38]

Reindeer Moss Eater

Ты сам догадался, или помог кто? Ясно-понятно, что так и есть. Ну какого хрена я б тогда заваривал все это, если бы я знал, как это сделать? Ты меня поражаеш своей догадливостью. Кстати! Ты так и не ответил на поставленный вопрос. :)


 
test   (2003-08-07 16:04) [39]

Кстати! Скажи мне пожалуйста, куда ты эту процедуру в коде прикрутишь? На какое событие она будет вызываться?


procedure WorkWithServer;
var cStr:string;
begin
while True do
begin
cStr:=IdTCPClient.ReadLn;
if cStr = "go to bed" then Break
else if cStr = "Делай то" then ExeDelayToTo
else if cStr = "Делай cё" then ExeDelaySe
else ExeDoSomethind;
end;
end;


 
Reindeer Moss Eater ©   (2003-08-07 16:05) [40]

Вот взял я твою процедурку и куда мне ее прикрутить?

Этот что ли вопрос? Прикрути куда больше нравится. Мне например больше нравится pas модулю прикручивать.



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

Текущий архив: 2003.10.13;
Скачать: CL | DM;

Наверх




Память: 0.56 MB
Время: 0.018 c
14-40634
Knight
2003-09-22 11:30
2003.10.13
---|Ветка была без названия|---


1-40343
PsoFT
2003-10-02 02:05
2003.10.13
handle


14-40616
Pindos
2003-09-24 20:59
2003.10.13
(Сотовые телефоны)Набор мелодий в ручную


1-40384
Виктор
2003-10-01 11:50
2003.10.13
Где достать такой компонент


14-40639
bug008
2003-09-21 13:03
2003.10.13
вопрос по Word.