Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Функция 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;


Наверх

Титульная страница Поиск, карта сайта Написать письмо