![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Функция WaitFor в Indy. [D7, XP]
Новичек © (2007-11-02 13:04:00)Уважаемые Мастера, вот кусок кода:
idtlnt1.Port := 20020;
idtlnt1.Host := '10.10.110.14';
idtlnt1.connect;
idtlnt1.WaitFor('Userid:');
idtlnt1.Write('It's me' + #13#10);
idtlnt1.WaitFor('Password:');
idtlnt1.Write('Password' + #13#10);
где idtlnt1 - клиент телнета из библиотеки Indy (типа TIdTelnet).
Подскажите, пожалуйста, ну почему WaitFor не работает (прога висит бесконечно).
Спасибо.
Новичек (2007-11-02 16:32:00) [1]
> Reindeer Moss Eater
Переделал telnet-клиент от Indy. Работает, вроде. Правда, сокет я использовал стандартный API'шный, но мне так удобнее и проще работать.
Reindeer Moss Eater (2007-11-02 15:01:00) [2]Мда. Намек не понят.
Ты бы лучше уточнил, что именно приходит от сервера в качестве приглашения ввести юзерайди.
А то ты ждешь до упора одно, а оно уже пришло, но немного не такое как ты думаешь.
Новичек (2007-11-02 14:53:00) [3]Ну, это понятно.
Я уже взял исходник телнета из Indy, пытаюсь перелопатить его.
Reindeer Moss Eater (2007-11-02 13:38:00) [4]const cstr = 'userid:';
....
begin
while Pos('Userid:',cstr) = 0 do;
end;
Тоже "зависает". Странно, да?
Новичек (2007-11-02 13:32:00) [5]Спасибо. Как я понял из ответа - хрен мне, а не WaitFor :)
umbra (2007-11-02 13:30:00) [6]если прога висит, значит ей не приходит то, чего она ждет
Reindeer Moss Eater (2007-11-02 13:26:00) [7]function TIdTCPConnection.WaitFor(const AString: string): string;
//TODO: Add a time out (default to infinite) and event to pass data
//TODO: Add a max size argument as well.
//TODO: Add a case insensitive option
//TODO: Bug - returns too much data. Should only return up to search string adn not including
// and leave the rest in the buffer.
begin
Result := '';
// NOTE: AnsiPos should be used here, but AnsiPos has problems if result has any #0 in it,
// which is often the case. So currently this function is not MBCS compliant and should
// not be used in MBCS environments. However this function should only be used on incoming
// TCP text data as it is 7 bit.
while Pos(AString, Result) = 0 dobegin
Result := Result + CurrentReadBuffer;
CheckForDisconnect;
end;
end;