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

Вниз

Подскажите непонятливому!!!! 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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.54 MB
Время: 0.009 c
3-40257
GS
2003-09-23 12:10
2003.10.13
Подскажите, как бороться РАЗРАСТАЕТСЯ база Access2000


1-40468
Vladimir
2003-10-02 10:56
2003.10.13
Как определить, содержит ли строка допустимый путь и имя файла


1-40417
P0tia
2003-09-30 18:40
2003.10.13
Label не обновляется


3-40264
ViKS
2003-09-24 11:38
2003.10.13
Не выводятся данные в DBlookUpcombo


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





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский