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

Вниз

Вопрос по компоненту Indy.   Найти похожие ветки 

 
AlexanderVas ©   (2004-08-16 18:44) [0]

Народ нужна помощь, обыскался просто!

У меня вопрос по компоненту Indy.
По запросу удаленная машина передает мне последовательность байт
for i := 0 to s-1 do
begin
  ...
  MeOtv.Text :=MeOtv.Text+ " | " +
         IntToStr(IdTCPClient1.ReadInteger));
  ...
end;

если пришло s байт то все нормально, но если меньше, то приложение виснет.
1) Можно ли установить таймаут на чтение?
2) Как можно определить пришло ли мне что-то или нет?

Заранее спасибо!


 
Digitman ©   (2004-08-17 08:50) [1]


> если пришло s байт


ну, положим, не s байт, а s*sizeof(integer) байт ...


> если меньше, то приложение виснет


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


 
Alexandervas ©   (2004-08-17 10:39) [2]

>ну, положим, не s байт, а s*sizeof(integer) байт ...

ну да

>это предусмотрено прикладным твоим протоколом инф.обмена

нет просто данные мне пересылает прибор, а он может и прерваться
при этом мне нельзя разрывать соединение с ним


 
Digitman ©   (2004-08-17 10:46) [3]


> при этом мне нельзя разрывать соединение с ним


а что будешь делать, если он "прервался" ?


 
Alexandervas ©   (2004-08-17 11:02) [4]


> а что будешь делать, если он "прервался" ?


повторно запрошу данные


 
Digitman ©   (2004-08-17 11:13) [5]

используй вместо ReadInteger() ф-цию ReadFromStack(), которая позволяет задать значение тайм-аута ожидания


 
Alexandervas ©   (2004-08-17 11:20) [6]


> вместо ReadInteger() ф-цию ReadFromStack()


а не мог бы дать примерчик, а то с хелпом справиться не могу


 
Digitman ©   (2004-08-17 11:25) [7]


> с хелпом справиться не могу


что тебе там непонятно ?


 
Alexandervas ©   (2004-08-17 12:03) [8]


> что тебе там непонятно ?


function ReadFromStack(const ARaiseExceptionIfDisconnected: boolean; const ATimeout: integer; const AUseBuffer: boolean; ADestStream: TIdBuffer): integer;

мне не очень понятно для чего ARaiseExceptionIfDisconnected и AUseBuffer


 
Digitman ©   (2004-08-17 12:13) [9]


> ARaiseExceptionIfDisconnected


True означает, что если в период тайм-аута ожидания произойдет разрыв соединения, то будет возбуждено исключение


> AUseBuffer


True означает, что принимаемые данные будут добавляться во внутренний буфер приема Инди, откуда потом их можно получить соотв.методами ... тебе это вряд ли нужно - достаточно указать последним параметром своего наследника TIdBuffer, и принятые данные будут записаны непосредственно туда


 
Alexandervas ©   (2004-08-17 12:21) [10]

Все получилось.
Digitman, большое тебе спасибо!!!



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

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

Наверх




Память: 0.49 MB
Время: 0.026 c
1-1097351465
3J106UH
2004-10-09 23:51
2004.10.24
строки memo


14-1096548573
default
2004-09-30 16:49
2004.10.24
Кто-нибудь знает где можно бесплатно скачать книгу Ласло, ...


1-1097494617
Dinnik
2004-10-11 15:36
2004.10.24
Количество знаков после запятой


14-1097055400
Novenkiy
2004-10-06 13:36
2004.10.24
Всё про Excel


14-1096662951
Мазут Береговой
2004-10-02 00:35
2004.10.24
Вот интересная штука Панда антивирус: