![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
![]() Помогите с программой!
Дело вот в чем, надо поставить прогу на автозагрузку чтобы собирал бекапы с оборудовании. Но только если в программе не указывать цикл IF и оставить одно оборудование то работает через раз, не отправляет команды и если оставить IF то вообще не работает. Выходит username:, ждет а потом говорит типа время превышено и на этом все. Помогите побороть задачку. Код:
procedure TForm1.IdTelnet1DataAvailable(Sender: TIdTelnet; const Buffer: String); const CR=#13; LF=#10; var Start, Stop: integer; begin memo1.Lines.Add(''); start:=1; stop:=Pos(CR, Buffer); if stop = 0 then stop:=length(buffer)+1; while start<=length(buffer) do begin memo1.Lines.Strings[memo1.Lines.Count - 1]:= memo1.Lines.Strings[memo1.Lines.count - 1] + copy(buffer, start, stop - start); if buffer[stop] = CR then begin memo1.Lines.Add(''); end; start:=stop+1; if start > length(buffer) then break; if buffer[start] = LF then start:=start+1; stop:=start; while (buffer[stop] <> CR) and (stop <=length(buffer)) do stop:=stop+1; end; end; procedure TForm1.snd(ds: string); begin for i:=1 to length(ds) do idtelnet1.SendCh(ds[i]); idtelnet1.SendCh(#13); end; procedure TForm1.tlnt(ipadr: string; hostname: string); begin usr:='rroot'; pass:='rootpass'; lgt:='logout'; cmd:='enable' + #13 + 'backup configuration ftp 10.244.7.205 ' + hostname + '-' + datetimetostr(date); IdTelnet1.Host:=ipadr; IdTelnet1.Connect; snd(usr); snd(pass); snd(' '); snd(' '); snd(cmd); snd('y'); // Sleep(60000); snd(lgt); end; procedure TForm1.FormCreate(Sender: TObject); begin for i:=1 to 2 do begin if i=1 then tlnt('10.24.5.14', 'huawei-1'); if i=2 then tlnt('10.24.5.178', 'huawei-2'); end; end; end. |
#2
|
||||
|
||||
![]() Вопрос, зачем в FormCreate такой изврат
Код:
... for i:=1 to 2 do begin if i=1 then tlnt('10.24.5.14', 'huawei-1'); if i=2 then tlnt('10.24.5.178', 'huawei-2'); end; ... Код:
... tlnt('10.24.5.14', 'huawei-1'); tlnt('10.24.5.178', 'huawei-2'); ... Я не понял Вашего вопроса, но всё же Вам на него отвечу! |
#3
|
|||
|
|||
![]() Alegun, приветствую!
Сори, грубейшая ошибка, имелось виду не IF a FOR...DO ![]() И вправду, пока переписывал сам не заметил что цикл здесь уже не нужен. Процедура tlnt не дожидается ответа на отправленные команды и пытается подключится к другому оборудованию и в этот момент выдает ошибку о том что "Alredy connect". Пробывал вписать sleep но тогда прога вообще ничего не выдает и не понятно что сделано, а что нет. По идее, когда доделаю не надо чтобы он выдавал результаты в мемо, это просто сейчас для отладки. |
#4
|
|||
|
|||
![]() Цитата:
Да ждет она, ждет. Ты в свою процедуру tlnt добавь в конце отключение (IdTelnet1.Disconnect; ). |
#5
|
|||
|
|||
![]() Disconnect добавлял тогда вообще ничего в мемо не отображает и бекапы не снимает, т.е. ничего не происходит. Если бы ждал я думаю ошибку алреди конект не выдавал, правда?
|
#6
|
||||
|
||||
![]() Цитата:
jmp $ ; Happy End! The Cake Is A Lie. |
#7
|
|||
|
|||
![]() О люди а что если сделать так, завускать прогу в командной строке и задавать в виде параметров те же ИП и название. Тогда в коде вызов процедуры tlnt будет только один раз. Сделать батник и вызывать батник по расписанию.
Как это сделать? ну что бы параметры принимал. |