Конференция "Сети" » Обработчик прихода данных для TIdTCPClient [WinXP]
 
  • Alik (01.03.09 16:52) [0]
    Добрый день,

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

    Пробовал например так, в событии Таймера делаю
    TIdTCPClient.Readln, работает, но когда буффер пустой появляется  исключение. Как блокировать это исключение или
    можно ли узнать есть ли что-нибудь в буфере перед тем как вызвать Readln?
  • Сергей М. © (01.03.09 17:33) [1]

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


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

    Читай сюда:
  • Сергей М. © (01.03.09 17:33) [2]
  • Eraser © (01.03.09 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 (02.03.09 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 (02.03.09 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!
  • Сергей М. © (02.03.09 12:07) [6]

    > Alik   (02.03.09 11:35) [5]



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


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


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


    ?
  • Alik (02.03.09 12:38) [7]
    > Сергей М.

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

    Можно ли как то кастрировать это сообщение? нету данных ну и работай в нормальном режиме дальше без предупреждений!
  • Сергей М. © (02.03.09 13:00) [8]

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


    Можно.
    Заключи жертву кастрации в блок try..except
  • Eraser © (02.03.09 13:44) [9]
    > [4] Alik   (02.03.09 11:33)


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

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

    OutboundClient это и есть TIdTcpClient.
  • Alik (02.03.09 17:11) [11]
    Eraser ©   (02.03.09 13:45) [10]
    > OutboundClient для IdTcpClient

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

    Компидятор пишет - "Undeclared identifier CheckForDataOnSource"
  • Eraser © (02.03.09 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 (02.03.09 20:26) [13]
    > Eraser ©   (02.03.09 19:08) [12]

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

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

    А можно где скачать free обновленные компонентки?
  • Eraser © (02.03.09 20:47) [14]
    > [13] Alik   (02.03.09 20:26)

    можно скачать Делфи 2009 )
  • DVM © (02.03.09 22:13) [15]

    > Alik   (02.03.09 12:38) [7]


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

    Не может, инди - это синхронные блокирующие сокеты, они вообще не вписываются в событийную модель Windows.
 
Конференция "Сети" » Обработчик прихода данных для TIdTCPClient [WinXP]
Есть новые Нет новых   [134435   +33][b:0][p:0.001]