Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

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


Страницы:   1 2

vovanx ©   (2004-03-22 06:14:00) 

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


Polevi   (2004-03-23 14:24:00) [1]

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


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


> Polevi

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


Polevi   (2004-03-23 11:21:00) [3]

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

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


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

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


Reindeer Moss Eater   (2004-03-23 11:05:00) [5]

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

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


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

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


Reindeer Moss Eater   (2004-03-23 11:01:00) [7]

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


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

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


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

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


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

str := Str + IdTCPClient1.ReadLn;

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


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

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


Reindeer Moss Eater   (2004-03-23 10:44:00) [12]

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

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


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

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


Reindeer Moss Eater   (2004-03-23 09:03:00) [14]

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

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

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


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

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

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;


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


Verg   (2004-03-22 09:35:00) [16]

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


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

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

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


Verg   (2004-03-22 09:04:00) [18]


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


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


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

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


Digitman   (2004-03-22 08:48:00) [20]


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


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


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо