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

Вниз

Обработчик прихода данных для TIdTCPClient   Найти похожие ветки 

 
Alik   (2009-03-01 16:52) [0]

Добрый день,

Столкнулся с проблемой создания обработчика поступления данных для INDY компоненты TIdTCPClient. В TIdTCPServer есть такая обработка - OnExecute.

Пробовал например так, в событии Таймера делаю
TIdTCPClient.Readln, работает, но когда буффер пустой появляется  исключение. Как блокировать это исключение или
можно ли узнать есть ли что-нибудь в буфере перед тем как вызвать Readln?


 
Сергей М. ©   (2009-03-01 17:33) [1]


> Пробовал например так, в событии Таймера делаю


Убирай таймер совсем.
Он здесь ни с какого боку не нужен.

Читай сюда:


 
Сергей М. ©   (2009-03-01 17:33) [2]

http://www.indyproject.org/docsite/html/frames.html?frmname=topic&frmfile=TIdTCPServer_OnExecute.html


 
Eraser ©   (2009-03-01 17:39) [3]

> [0] Alik   (01.03.09 16:52)


> можно ли узнать есть ли что-нибудь в буфере перед тем как
> вызвать Readln?

IOHandler.CheckForDataOnSource
IOHandler.InputBuffer
       OutboundClient.IOHandler.InputBuffer.ExtractToBytes(bData);
       if Length(bData) > 0 then
       begin
         //
       end;


 
Alik   (2009-03-02 11:33) [4]

> Eraser ©   (01.03.09 17:39) [3]

IOHandler.CheckForDataOnSource
IOHandler.InputBuffer
      OutboundClient.IOHandler.InputBuffer.ExtractToBytes(bData);
      if Length(bData) > 0 then
      begin
        //
      end;

А где находится методы IOHandler.CheckForDataOnSource, IOHandler.InputBuffer и OutboundClient для IdTcpClient?


 
Alik   (2009-03-02 11:35) [5]


> Сергей М. ©   (01.03.09 17:33) [2]
> http://www.indyproject.org/docsite/html/frames.html?frmname=topic&frmfile=TIdTCPServer_OnExecute.
> html


По данной ссылке нашел инфу по IdTCPServer, а нужно для Сlient!


 
Сергей М. ©   (2009-03-02 12:07) [6]


> Alik   (02.03.09 11:35) [5]



> а нужно для Сlient


А какого же лешего тогда упоминаешь


> В TIdTCPServer есть такая обработка - OnExecute


?


 
Alik   (2009-03-02 12:38) [7]

> Сергей М.

А может ли вообще Client узнать, что у него пришли данные во входящий регистр не вызывая функций чтения Readln и др., которые в случае отсутствия данных вываливают сообщение о таймауте.

Можно ли как то кастрировать это сообщение? нету данных ну и работай в нормальном режиме дальше без предупреждений!


 
Сергей М. ©   (2009-03-02 13:00) [8]


> Можно ли как то кастрировать это сообщение?


Можно.
Заключи жертву кастрации в блок try..except


 
Eraser ©   (2009-03-02 13:44) [9]

> [4] Alik   (02.03.09 11:33)


> А где находится методы

в IOHandler.


 
Eraser ©   (2009-03-02 13:45) [10]

> OutboundClient для IdTcpClient

OutboundClient это и есть TIdTcpClient.


 
Alik   (2009-03-02 17:11) [11]

Eraser ©   (02.03.09 13:45) [10]
> OutboundClient для IdTcpClient

Да, но метод IdTcpClient.IOHadler.CheckForDataOnSource не доступен!

Компидятор пишет - "Undeclared identifier CheckForDataOnSource"


 
Eraser ©   (2009-03-02 19:08) [12]

> [11] Alik   (02.03.09 17:11)

возможно у тебя более старая версия Indy. вот исходник этой функции
function TIdIOHandler.CheckForDataOnSource(ATimeout: Integer = 0): Boolean;
begin
 // return whether at least 1 byte was received
 Result := False;
 if Connected then begin
   Result := ReadFromSource(False, ATimeout, False) > 0;
 end;
end;


 
Alik   (2009-03-02 20:26) [13]

> Eraser ©   (02.03.09 19:08) [12]

Удивительно, но осутствует даже метод IDTCPCLient1.IOHandler.ReadFromSource !

Видимо я капитально отстал от жизни (

А можно где скачать free обновленные компонентки?


 
Eraser ©   (2009-03-02 20:47) [14]

> [13] Alik   (02.03.09 20:26)

можно скачать Делфи 2009 )


 
DVM ©   (2009-03-02 22:13) [15]


> Alik   (02.03.09 12:38) [7]


> А может ли вообще Client узнать, что у него пришли данные
> во входящий регистр не вызывая функций чтения Readln и др.
> , которые в случае отсутствия данных вываливают сообщение
> о таймауте.

Не может, инди - это синхронные блокирующие сокеты, они вообще не вписываются в событийную модель Windows.



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

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

Наверх




Память: 0.5 MB
Время: 0.01 c
3-1255705719
IOrist
2009-10-16 19:08
2011.03.27
Как отобразить поля в гриде без гемора?


3-1255713544
IOrist
2009-10-16 21:19
2011.03.27
Что такое Transform в access


1-1249326627
TStas
2009-08-03 23:10
2011.03.27
Заставка программы не перерисовывается, как нужно


3-1255678695
Lanu
2009-10-16 11:38
2011.03.27
Подключение ODAC


2-1294129298
cross
2011-01-04 11:21
2011.03.27
освобождение памяти под интерфейс