Форум: "Сети";
Текущий архив: 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 модулю прикручивать.
← →
Reindeer Moss Eater (2003-08-07 16:06) [41]Кстати! Скажи мне пожалуйста, куда ты эту процедуру в коде прикрутишь? На какое событие она будет вызываться?
После успешного коннекта.
← →
Tiny (2003-08-07 16:07) [42]2Reindeer Moss Eater
2. Куда прицепить показанный код.
Мож я чего пропустил - но ты так и не ответил КУДА
А без этого какой смысл от ответа на первый вопрос??
А за всем этим неявный вопрос "Как мне написать мою программу?"
А у кого ты видел другое??
← →
Tiny (2003-08-07 16:09) [43]Tiny (07.08.03 16:07)
:-) не успел спросить...:-)
← →
Reindeer Moss Eater (2003-08-07 16:10) [44]А у кого ты видел другое??
У многих видел.
А ты многих видел, кто бросает все, и отвечает на подобные "вопросы"?
← →
test (2003-08-07 16:13) [45]
> Мне например больше нравится pas модулю прикручивать
Ты или маленький, или под маленького косишь? Я тебя по человечески спрашиваю, как будет вызываться этот код? Если повесить его на событие - OnConnect, то после первого вызова не спасет даже AntyFreez. А как по другому прога поймет, что ей прислали пакеты, я просто не представляю. Объясни непонятливому!
← →
test (2003-08-07 16:16) [46]
> Только все, что ты спрашивал, это
> 1. Как читать данные (тебе сказали как)
> 2. Куда прицепить показанный код.
1. Я не спрашивал, как читать данные. Это твоих рук дело. Я задал конкретный вопрос, а то, что ты ответил по своему, так это уже извините.
2. И досихпор не пойму, как и откуда ты собрался вызывать этот код. Все нафиг повиснет и конец.
← →
$hade (2003-08-07 16:17) [47]Я вот кста не увидел за этим вопросом никакого неявного...
С год-полгода назад я несколько раз пытался узнать именно такой же вопрос - так в итоге не один и не ответил...хотя сообщений было много...в итоге пришлось разбираться самому...перелапачивать все исходники и тратить уйму времени на простой вопрос...
Человек столкнулся с совершенно незнакомой ему темой...и нфы нет в принципе...
Я так и не встречаю тут людей кто хотя бы более менее знает Indy...
А чем этот вопрос отличается от других?
← →
Reindeer Moss Eater (2003-08-07 16:18) [48]test
Слушай ты, большой, не пытающийся косить под умного.
Забудь ты про события!
Метод Connect - СИНХРОННЫЙ!!!!
Если он не вызывает исключения, то следущая строчка после него -место для вызова этой процедуры или ей подобной.
← →
$hade (2003-08-07 16:21) [49]2test (07.08.03 16:16)
Блин! И ты еще тоже! :-))) В отдельный поток все! :-)
Открой исходник idTelnetClient - там кода мало и все более-менее понятно...
← →
test (2003-08-07 16:22) [50]Reindeer Moss Eater
Начнем с того, что я пока ничего обидного в твою сторону не сказал. И если ты не в состоянии показать это дело на примере, а в состоянии только языком молотить, тогда ты действительно нифига не понимешь.
← →
Reindeer Moss Eater (2003-08-07 16:30) [51]Начни с того, что помести вызов процедуры в строчке своего кода, следующей за вызовом Connect.
Это конкретный ответ на вопрос, или до сих пор что-то непонятно?
← →
Erik Ivanov (2003-08-07 16:37) [52]Reindeer Moss Eater
Злобный ты какой!
test
Он имелл виду надо сделать отдельный TThread и в нем читать данные! Далее передавать их в буфер главного потока. Незабудь про критические секции хотя можно выделать память а указатель кидать через PostMessage(,,Integer(MyPoint)). После обязательно освободить. В Delphi есть demo как работать с тредами.
← →
Reindeer Moss Eater (2003-08-07 16:42) [53]Erik Ivanov
Я конечно злобный, но счас спросят про событие на которое надо вешать "все то, что ты сказал"
← →
test (2003-08-07 17:10) [54]Reindeer Moss Eater
Как ты мне надоел. Я тебе русским языком говорю - НЕРАБОТАЕТ эта херня. Пробовал я уже иWith TCPClient Do
и еще немерянно разных вариантов. НЕРАБОТАЕТ!!! один раз сообщение проходит и п....ц! Хоть застрелись. Возьми блин и попробуй у себя. Если проканает, дай мне кусок твоего кода или exeшник, если оно и у меня пройдет, то я принесу тебе свои извинения по поводу недопонимания с моей стороны. Если нет ...
← →
Reindeer Moss Eater (2003-08-07 17:22) [55]один раз сообщение проходит и п....ц! Хоть застрелись.
Ну и причем здесь клиент?
Если с сервера ничего кроме первого сообщения не приходит, то чего ты ожидаешь от программы клиента?
и еще немерянно разных вариантов. НЕРАБОТАЕТ!!!
Неработает говоришь?
Прямо так вот и сообщает "НЕ РАБОТАЮ, ХОТЬ ЗАСТРЕЛИСЬ"
Так ты застрелись, может заработает.
← →
Reindeer Moss Eater (2003-08-07 17:25) [56]Если проканает, дай мне кусок твоего кода или exeшник
Здесь никто до сих пор твоего кода еще не видел, который "не работает". Что мы вообще обсуждаем?
← →
nikkie (2003-08-07 17:27) [57]>test
>НЕРАБОТАЕТ!!!
вероятно у тебя просто проблема с сервером
← →
Reindeer Moss Eater (2003-08-07 17:30) [58]У него проблема с таймаутом Infinity и еще кое с чем.
← →
Digitman (2003-08-07 17:37) [59]
> test
умерь пыл, сударь !
ReadLn() читает строку, посланную сервером.
Строкой считается блок поступающих со стороны передатчика данных, ограниченных справа нуль-терминатором.
Пока нуль-терминатор не получен, ReadLn() будет блокировать исполнение дальнейших операторов в том коловом потоке, в котором ReadLn() вызван.
← →
test (2003-08-07 17:50) [60]Пишу для особо одаренных (Reinder Moss Eater)!!!
Серверная часть: (Просто пример)
Procedure TForm1.ServerExecute;
Begin
Msg := Server.ReadLn;
If Msg = "xxx" Then
// Посылаем сообщение моему клиенту
Else
ShowMessage ("Reinder Moss Eater - El Stuppido");
End;
Учитываем, что сообщения посылаются не все сразу, а с разным промежутком времени и в разных колличествах.
Теперь клиент.
Procedure TForm1.ClientRead;
Begin
With Client Do
Begin
Msg := Client.ReadLn;
If Msg = "xxx" Then
// Чего то там
Else
( "Reinder Moss Eater - El Stuppido")Пишу для особо одаренных (Reinder Moss Eater)!!!
Серверная часть: (Просто пример)
Procedure TForm1.ServerExecute;
Begin
Msg := Server.ReadLn;
If Msg = "xxx" Then
// Посылаем сообщение моему клиенту
Else
ShowMessage ("Reinder Moss Eater - El Stuppido");
End;
Учитываем, что сообщения посылаются не все сразу, а с разным промежутком времени и в разных колличествах.
Теперь клиент.
Procedure TForm1.ClientRead;
Begin
With Client Do
Begin
Msg := Client.ReadLn;
If Msg = "xxx" Then
// Чего то там
Else
ShowMessage ("Reinder Moss Eater - El Stuppido");
End;
End;
При вызове процедурыClientRead из OnConnect
, чтение выполняется всего один раз. После выполнения, упорно отказывается принимать любые сообщения от сервера.
← →
nikkie (2003-08-07 18:08) [61]я ж говорю - проблема с сервером. твой (просто пример) ничего не посылает.
← →
test (2003-08-07 18:32) [62]
Procedure TForm1.SendVars (Msg: String);
Begin
List := tcp_rtsserver.Threads.LockList;
Try
For Count := 0 To List.Count - 1 Do
Try
TIdPeerThread(List.Items[Count]).Connection.WriteLn(Msg);
Except
TIdPeerThread(List.Items[Count]).Stop;
End;
Finally
tcp_rtsserver.Threads.UnlockList;
End;
End;
Procedure TForm1.ServerExecute;
Begin
With Server Do
Begin
Msg := Server.ReadLn;
If Msg = "xxx" Then
SendVars (Какоето сообщение);
Else
( "Reinder Moss Eater - El Stuppido")
Procedure TForm1.SendVars (Msg: String);
Begin
List := tcp_rtsserver.Threads.LockList;
Try
For Count := 0 To List.Count - 1 Do
Try
TIdPeerThread(List.Items[Count]).Connection.WriteLn(Msg);
Except
TIdPeerThread(List.Items[Count]).Stop;
End;
Finally
tcp_rtsserver.Threads.UnlockList;
End;
End;
Procedure TForm1.ServerExecute;
Begin
With Server Do
Begin
Msg := Server.ReadLn;
If Msg = "xxx" Then
SendVars (Какоето сообщение);
Else
ShowMessage ("Reinder Moss Eater - El Stuppido");
End;
End;
Так лучше? Все он посылает. Вот приемник не пашет :(
← →
nikkie (2003-08-07 18:58) [63]>Так лучше?
нет, не лучше.
сервер:
procedure TForm1.IdTCPServer1Execute(AThread: TIdPeerThread);
var
ACommand: String;
begin
ACommand := AThread.Connection.ReadLn;
if ACommand = "LIST" then begin
AThread.Connection.WriteLn("line1");
AThread.Connection.WriteLn("line2");
AThread.Connection.WriteLn("line3");
AThread.Connection.WriteLn("line4");
AThread.Connection.WriteLn("");
end else if ACommand = "QUIT" then begin
AThread.Connection.WriteLn("Bye");
AThread.Connection.WriteLn("");
AThread.Connection.Disconnect;
end else begin
AThread.Connection.WriteLn("Unrecognized command");
AThread.Connection.WriteLn("");
end;
end;
клиент:
procedure TForm1.ExecCmd(ACommand: String);
var
s: String;
begin
IdTCPClient1.Writeln(ACommand);
repeat
s := IdTCPClient1.Readln;
( s)>Так лучше?
нет, не лучше.
сервер:
procedure TForm1.IdTCPServer1Execute(AThread: TIdPeerThread);
var
ACommand: String;
begin
ACommand := AThread.Connection.ReadLn;
if ACommand = "LIST" then begin
AThread.Connection.WriteLn("line1");
AThread.Connection.WriteLn("line2");
AThread.Connection.WriteLn("line3");
AThread.Connection.WriteLn("line4");
AThread.Connection.WriteLn("");
end else if ACommand = "QUIT" then begin
AThread.Connection.WriteLn("Bye");
AThread.Connection.WriteLn("");
AThread.Connection.Disconnect;
end else begin
AThread.Connection.WriteLn("Unrecognized command");
AThread.Connection.WriteLn("");
end;
end;
клиент:
procedure TForm1.ExecCmd(ACommand: String);
var
s: String;
begin
IdTCPClient1.Writeln(ACommand);
repeat
s := IdTCPClient1.Readln;
Memo1.Lines.Add(s);
until s = "";
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
IdTCPClient1.Connect;
ExecCmd("XXX");
ExecCmd("LIST");
ExecCmd("QUIT");
IdTCPClient1.Disconnect;
end;
для имитации задержек в сервер можно добавить Sleep между вызовами Writeln. чтобы клиент при этих задержках реагировал на действия пользователя, на форму надо положить IdAntiFreeze.
← →
Fredericco (2003-08-07 19:15) [64]
TMyThread=class(THread)
procedure Execute; override;
procedure ReadFromSocket;
( True)
TMyThread=class(THread)
procedure Execute; override;
procedure ReadFromSocket;
end;
Var
MyThread=TMyThread;
......
MyThread:=TMyThread.Cteate(True);
......
procedure IndyOnConnect;
begin
MyThread.Resume;
end;
procedure IndyOnDisConnect;
begin
MyThread.Suspend;
end;
procedure TMyThread.Execute; override;
begin
While not Terminated do ReadFromSocket;
end;
procedure TMyThread.ReadFromSocket;
var
s:string;
begin
s:=Indy.ReadLn;
OnIndyClientRead(s);
end;
procedure OnIndyClientRead(Text:string);
begin
//
end;
← →
test (2003-08-07 19:23) [65]nikkie & Fredericco - От спасибо. Вот это дело, а то языками гоняют, а толку ... :( :)
← →
nikkie (2003-08-07 19:43) [66]>test
А теперь попробуй в этих примерах найти противоречие словам RME. Readln вызывается просто в цикле, никаких событий...
← →
Reindeer Moss Eater (2003-08-08 08:28) [67]test
При вызове процедуры ClientRead из OnConnect, чтение выполняется всего один раз. После выполнения, упорно отказывается принимать любые сообщения от сервера.
Вызвал процедуру ClientRead один раз, она отработала один раз.
Хотел чего-то другого?
← →
Reindeer Moss Eater (2003-08-08 08:40) [68]Test
Теперь вспомни, что тебе говорили в самом начале твоего трудного пути:
>Reindeer Moss Eater © (07.08.03 14:02)
Соединившись с сервером, клиент должен читать. Прочитав, должен читать снова.
>Reindeer Moss Eater © (07.08.03 14:04)
Как только произойдет возврат из метода чтения, так значит "Вам пакет"
← →
Е-Моё имя (2003-08-08 09:43) [69]Reindeer Moss Eater © (07.08.03 15:50)
test
За весь разговор с Вами, я не получил ни одного конкретного отвела
Ты просто не умеешь понимать читаемое.
точна! )))
и еще немерянно разных вариантов. НЕРАБОТАЕТ!!!
Неработает говоришь?
Прямо так вот и сообщает "НЕ РАБОТАЮ, ХОТЬ ЗАСТРЕЛИСЬ"
Так ты застрелись, может заработает.
точна! )))
← →
test (2003-08-08 13:25) [70]Удалено модератором
← →
Е-Моё имя (2003-08-08 13:28) [71]Удалено модератором
← →
_test_ (2003-08-08 13:49) [72]Удалено модератором
← →
_test_ (2003-08-08 13:55) [73]Удалено модератором
← →
Reindeer Moss Eater (2003-08-08 13:59) [74]Иногда природа отдыхает не только на детях гениев.
Иногда она просто так отдыхает.
← →
Е-Моё имя (2003-08-08 14:11) [75]Reindeer Moss Eater © (08.08.03 13:59)
не, не отдыхает
тренируется
по нику сразу видно ;)))))))))
бугагагагаагаа))))))
← →
Reindeer Moss Eater (2003-08-08 14:15) [76]Е-Моё имя
Ну да, согласен полностью.
← →
_test_ (2003-08-08 14:32) [77]Удалено модератором
Примечание: Предупреждение тебе.
← →
Maximka (2003-08-18 21:19) [78]Читал я, читал.....
А можно было просто установить старые компоненты.
Сделать с этого модуля *.dpk и инсталл его...
unit RegSockComps;
interface
procedure Register;
implementation
uses
ScktComp, Classes, DesignIntf;
procedure Register;
begin
RegisterComponents("Internet", [TServerSocket, TClientSocket]);
end;
end.
← →
Maximka (2003-08-18 21:19) [79]Читал я, читал.....
А можно было просто установить старые компоненты.
Сделать с этого модуля *.dpk и инсталл его...
unit RegSockComps;
interface
procedure Register;
implementation
uses
ScktComp, Classes, DesignIntf;
procedure Register;
begin
RegisterComponents("Internet", [TServerSocket, TClientSocket]);
end;
end.
Страницы: 1 2 вся ветка
Форум: "Сети";
Текущий архив: 2003.10.13;
Скачать: [xml.tar.bz2];
Память: 0.66 MB
Время: 0.01 c