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

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.49 MB
Время: 0.037 c
3-1082192120
diwin
2004-04-17 12:55
2004.05.16
запрос в Query Analyzer с выборкой из разных серверов


1-1083649698
konstantinov
2004-05-04 09:48
2004.05.16
Как вывести сообщение поверх всех окон


1-1082973506
Daman
2004-04-26 13:58
2004.05.16
Как получить тег любого объекта кликом на него


14-1082646601
Валентин Сушняк
2004-04-22 19:10
2004.05.16
Посоветуйте компонент или научите!


8-1077816064
evrey
2004-02-26 20:21
2004.05.16
Получение цвета пикселя в изображении.





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