Форум: "Сети";
Текущий архив: 2011.03.27;
Скачать: [xml.tar.bz2];
ВнизОбработчик прихода данных для 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.InputBufferOutboundClient.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;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.004 c