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

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

IdTCPClient [D6, Win2k]


Страницы:   1 2 3 4

Manulo ©   (2004-02-09 18:47:00) 

Что можно сделать, что бы он не вешал приложение при коннекте, если удалённый хост долго (или совсем) не отвечает?


Verg   (2004-02-10 15:17:00) [41]


> Manulo ©   (10.02.04 14:49) [22]


Стоп, стоп... Дык в какой-то из 9-х версий Indy connect и так уже выделен в отдельный поток.
Или я ошибаюсь?

Т.е. В той, которая идет с D6 connect блокирующая операция и никакой антифриз там не поможет.
А вот в девятке, по-моему уже они припаяли тут Thread. На коннекте запускают его, он делает блокирующий connect, а в это время главный потоку кружится в цикле с антифризом, ожидая, пока этот поток не завершится.


Manulo   (2004-02-10 14:49:00) [42]

type TTransportThread = class(TThread)
 private
   FRemoteHost : String;
   FRemotePort : Integer;
   FClient     : TidTCPClient;
 protected
   procedure Execute; override;
 public
   constructor Create(CreateSuspended: Boolean = false);
   procedure set_rem_host(host:string);
end;


var   TransportThread : TTransportThread;


constructor TTransportThread.Create(CreateSuspended: Boolean);
begin
inherited Create(CreateSuspended);
end;

procedure TTransportThread.set_rem_host(host:string);
begin
FRemoteHost:=host;
FRemotePort:= 1500;
end;

procedure TTransportThread.Execute;
var s : string;
   i : integer;
begin
 try
   FClient := TidTCPClient.Create(nil);
   try
     try
       EndWorkFlag:=false;
       FClient.Host := FRemoteHost;
       FClient.Port := FRemotePort;
       FClient.Connect;
       if FClient.Connected then FClient.WriteLn('ping');
       if FClient.Connected then s:=FClient.ReadLn;
       FClient.Disconnect;
       form1.PingAnalis(s);
     except
       form1.Memo1.Text:=form1.Memo1.Text+'ERROR!';
     end;
   finally
     FClient.Free;
   end;
 except
   //..лог исключений
 end;
end;


procedure TForm1.FormCreate(Sender: TObject);
begin
 TransportThread:=TTransportThread.Create(true);
//  :=new(TTransportThread); //выдаёт ошибку
//  New(TTransportThread,create(true)); //выдаёт ошибку
end;


procedure TForm1.ping_timerTimer(Sender: TObject);
begin
 TransportThread.set_rem_host(get_ip);
 TransportThread.Execute;
end;



> А IdAntiFreeze не помогает?

Нет, хотя может быть я не совсем разобрался, как им пользоваться


Vogus   (2004-02-10 14:37:00) [43]

Может я чего-то не понимаю: А IdAntiFreeze не помогает?


Verg   (2004-02-10 14:34:00) [44]


> Manulo ©   (10.02.04 14:23) [19]
> Но всё равно, неужто ни у кого не получилось решить проблему
> "тормозов"?


В рамках блокирующих сокетов - единственным приближением к решению проблемы "тормозов" (я так понял, что имеется ввиду connect) является отдельный код. поток для этого.


Manulo   (2004-02-10 14:23:00) [45]


> h0use ©   (10.02.04 14:10) [17]

Асинхронности точно не будет...

Но всё равно, неужто ни у кого не получилось решить проблему "тормозов"?


Verg   (2004-02-10 14:23:00) [46]


> Manulo ©   (10.02.04 14:07) [16]
>
> > Но, насколько я понял, всем полюбились именно Indy.
>
>
> С TClient(Server)Socket была тоже не вполне понятная проблема,
> когда коннект вроду бы и есть, а данные вроде бы и не идут
> :( Поэтому использую Indy... И если бы не тормоза.....


Да, видимо, Indy и подкупает своей "очевидностью" так сказать "drop and play".
DOS конечно не WinXP, но зато как все просто и понятно...


> h0use ©   (10.02.04 14:10) [17]
>
> > Manulo ©   (10.02.04 14:07) [16
>
> Именно по той же самой причине перелез на Инди, но вот уже
> смотря 9-ю и 10-ю версию с сожалением вижу, что асинхронности
> там нет и судя по всему не будет, как и поддержки Winsock2
> :(


Дык я ж говорю - видимо целью проекта Indy и была как раз кроссплатформенность, т.е. им нельзя было расчитывать на такие возможности/особенности сокетного ядра Windows, которые нельзя бы было воспроизвести под Линуксом.


h0use   (2004-02-10 14:10:00) [47]


> Manulo ©   (10.02.04 14:07) [16

Именно по той же самой причине перелез на Инди, но вот уже смотря 9-ю и 10-ю версию с сожалением вижу, что асинхронности там нет и судя по всему не будет, как и поддержки Winsock2 :(


Manulo   (2004-02-10 14:07:00) [48]


> Но, насколько я понял, всем полюбились именно Indy.


С TClient(Server)Socket была тоже не вполне понятная проблема, когда коннект вроду бы и есть, а данные вроде бы и не идут :( Поэтому использую Indy... И если бы не тормоза.....


Reindeer Moss Eater   (2004-02-10 12:33:00) [49]

Интересно, а кто-нибудь пробовал к TidTCPServer присоединить TTCPClient?

Если включить телепатию и перевести твой вопрос на русский, то :
попробовали сами авторы библиотеки, создав класс TidTCPConnection


Verg   (2004-02-10 12:28:00) [50]

http://www.delphimaster.ru/cgi-bin/forum.pl?id=1075625924&n=4

Там найдешь ссылку где взять Winsock2.pas


Verg   (2004-02-10 12:22:00) [51]


> h0use ©   (10.02.04 12:12) [11]
> Кстати, как задействовать Winsock2?


Что значит "как"?
Брать, да пользоваться расширенными функциями Winsock2.
Или я не понял вопроса.


Digitman   (2004-02-10 12:20:00) [52]


> h0use ©   (10.02.04 12:12) [11]
> Кстати, как задействовать Winsock2?


uses Winsock2


h0use   (2004-02-10 12:12:00) [53]

Кстати, как задействовать Winsock2?


Verg   (2004-02-10 12:06:00) [54]


> Erik ©   (10.02.04 11:55) [8]
> Есть такая проблема и частично решается она через установку
> TimeOut. Для избежания ее ненадо создовать конектов!
>
> P.S.
> Нет человека, нет проблемы. :)
> P.S.S.
> Еще UDP можно воспользоватся.


На самом деле, для избежания этих проблем ДДБ навернул на неблок. режим сокетов еще один - асинхронный, ДДБ "завернул" это в T(Client/Server)Socket. Правда остались невопощенными в компоненты возможности Winsock2....
Но, насколько я понял, всем полюбились именно Indy. Видимо всем надо переносимость под Kylix....

PS
ДДБ - Добрый Дядя Билл
ДДБ - Добрый Дядя Борланд


Verg   (2004-02-10 12:00:00) [55]


> h0use ©   (10.02.04 11:53) [7]
> Интересно, а кто-нибудь пробовал к TidTCPServer присоединить
> TTCPClient?


:)))

А в чем сомнения? Протокол-то один и тот же - TCP/IP.

Это ж всего лиш разные "обертки" одной и той же сущности - Socket Api.


Erik   (2004-02-10 11:55:00) [56]

Есть такая проблема и частично решается она через установку TimeOut. Для избежания ее ненадо создовать конектов!

P.S.
Нет человека, нет проблемы. :)
P.S.S.
Еще UDP можно воспользоватся.


h0use   (2004-02-10 11:53:00) [57]

Интересно, а кто-нибудь пробовал к TidTCPServer присоединить TTCPClient?


Verg   (2004-02-10 11:37:00) [58]


> h0use ©   (10.02.04 11:27) [4]
> Присоединяюсь к пред. оратору [3]. Как Indy заставить в
> неблокируемом режиме работать?


По-моему никак.
Indy по-определению работает с сокетами в блок. режиме.
Если кто разбирался подробно, пусть меня поправит.

Вот в TTCPClient предусмотрен этот режим.


Reindeer Moss Eater   (2004-02-10 11:36:00) [59]

переписать его исходные тексты


h0use   (2004-02-10 11:27:00) [60]

Присоединяюсь к пред. оратору [3]. Как Indy заставить в неблокируемом режиме работать?


Страницы:   1 2 3 4

Наверх

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