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

Вниз

Какой обработчик запускается когда приходят данные?   Найти похожие ветки 

 
vovanx   (2004-03-22 06:14) [0]

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


 
Verg ©   (2004-03-22 08:30) [1]


> Какой обработчик запускается  в TidTCPClient


Нет никаких "обработчиков" по приходу данных. В принципе нет.


 
vovanx   (2004-03-22 08:45) [2]

Но в сервер же есть OnExecute,
а в клиенте, что-нить подобное?


 
Digitman ©   (2004-03-22 08:48) [3]


> Но в сервер же есть OnExecute


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


 
vovanx   (2004-03-22 08:50) [4]

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


 
Verg ©   (2004-03-22 09:04) [5]


> [4] vovanx   (22.03.04 08:50)
> во всяком случае, в этом событии я их принимать могу,а хде
> принимать данные в клиенте, как правильно сделать?


Как только connect удачно выполнится, так сразу и можешь принимать/передавать.
Сервер активно использует дополнительные кодовые потоки (TThread). Бери пример - работу с клиентом тоже помести в доп. кодовый поток.


 
vovanx   (2004-03-22 09:08) [6]

Verg
Сорри, за  назойливость, просто никогда раньше не приходилось писать сетевых приложений.
Можно поподробнее про потоки, что значит

> Бери пример - работу с клиентом тоже помести в доп. кодовый
> поток.


 
Verg ©   (2004-03-22 09:35) [7]

Начни с освоения многопоточных приложений, потом заходи в сети. Иначе - либо используй поллинг (по таймеру), либо используй асинхронные клиентские сокеты наподобии TClientSocket.


 
vovanx   (2004-03-23 03:26) [8]

Сделал я поток а внем крутится вот это

procedure TMyThread.DoWork;

begin
with Form1 do begin
if IdTCPClient1.Connected then
         str := Str + IdTCPClient1.ReadLn;
  Label3.Caption := str;
 if Command.Command = "RECV" then begin
    ListBox1.Items.Add(">"+str);
    ProcessCommand(str,Command);
    ShowMessage("Принимаю файл: "+Command.Arg[0]);
 end;
end;  
end;


но что-то ничего не получает


 
Reindeer Moss Eater ©   (2004-03-23 09:03) [9]

Присваиваешь возвращаемый текст переменной str
str := Str + IdTCPClient1.ReadLn;

А иф сравнивает содержимое Command.Command с константой
if Command.Command = "RECV" then begin

И где здесь логика?


 
vovanx   (2004-03-23 10:39) [10]

тут строчку кода удалил вместе с коментарием,
ProcessCommand(str,Command);
парсит команду и ее аргументы


 
Reindeer Moss Eater ©   (2004-03-23 10:44) [11]

ProcessCommand(str,Command);
Распарсили строку
ShowMessage("Принимаю файл: "+Command.Arg[0]);
Показали сообщение

А где прием файла?


 
vovanx   (2004-03-23 10:52) [12]

я это сообщение еще немогу увидеть, поэтому до приема файла надо сначала команду принять,
вопрос в чем моя ошибка почему ничего не принимается,
когда это все по таймеру принималось - команда приходила


 
Reindeer Moss Eater ©   (2004-03-23 10:56) [13]

str := Str + IdTCPClient1.ReadLn;

Посылаемая команда ограничена CRLF?


 
vovanx   (2004-03-23 10:58) [14]

чесно несовсем понимаю что это, но вроде нет


 
vovanx   (2004-03-23 11:00) [15]

да и еще,
какая разница в том как посылать с сервера эту команду
SendCmd
или
SendReply


 
Reindeer Moss Eater ©   (2004-03-23 11:01) [16]

Посылаемая команда содержит завершающие её возврат каретки  + перевод строки?


 
vovanx   (2004-03-23 11:02) [17]

> Reindeer Moss Eater
нет не содержит, а это обязательно?


 
Reindeer Moss Eater ©   (2004-03-23 11:05) [18]

Необязательно. Но работать не будет.

Но метод IdTCPClient1.ReadLn ждет эти ограничители.
Если их нет, ждет таймаута.
Если таймаут бесконечный, то возврата из ReadLn не будет.


 
vovanx   (2004-03-23 11:15) [19]

вот попробовал неполучил опять ничего
IdTCPServer.CommandHandlers.Items[0].Response.Add("RECV "+ FileName+" "+IntToStr(FileSize)+"\r\n");


 
Polevi ©   (2004-03-23 11:21) [20]

>Сделал я поток а внем крутится вот это
>procedure TMyThread.DoWork;
>begin
>with Form1 do begin

ну конечно, а процедура эта вызвывается из поточной ф-ии через Synchronize(DoWork) и все работает в основном потоке
нафига доп. поток, спрашивается ?


 
vovanx   (2004-03-23 11:23) [21]


> Polevi

а что нетак с потоком?
как надо?


 
Polevi ©   (2004-03-23 14:24) [22]

ты хелп читал на TThread.Synchronize ?
понимаешь что делает эта ф-ия ?
или бездумно скопировал кривой код из сети ?



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

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

Наверх




Память: 0.51 MB
Время: 0.092 c
3-1082688315
ksa3003
2004-04-23 06:45
2004.05.16
Время сервера


7-1081344370
killer
2004-04-07 17:26
2004.05.16
ShellApi ShellExecute


3-1081404801
ev
2004-04-08 10:13
2004.05.16
Как передать текст из edit в SQL запрос?


1-1083321384
Vitaliy
2004-04-30 14:36
2004.05.16
Кто работал с компонентом PrintPreview?


9-1073250311
DrOne
2004-01-05 00:05
2004.05.16
Дайте ссылок по QuadTree