Форум: "Сети";
Текущий архив: 2004.10.24;
Скачать: [xml.tar.bz2];
ВнизВопрос по компоненту 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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.04 c