![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | 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
|
||||
|
||||
|
Цитата:
|
|
#7
|
|||
|
|||
|
О люди а что если сделать так, завускать прогу в командной строке и задавать в виде параметров те же ИП и название. Тогда в коде вызов процедуры tlnt будет только один раз. Сделать батник и вызывать батник по расписанию.
Как это сделать? ну что бы параметры принимал. |
|
#8
|
||||
|
||||
|
ParamCount, ParamStr
|
|
#9
|
|||
|
|||
|
Цитата:
Мог бы хтя бы в кратце обьяснить как его использовать, чот прочитал но не понял куда это вставлять. |
|
#10
|
||||
|
||||
|
Цитата:
|
|
#11
|
|||
|
|||
|
вот там то я его и читал )))
везде один и тотже пример |
|
#12
|
||||
|
||||
|
Цитата:
Код:
procedure TForm1.FormShow(Sender: TObject);
var
i: integer;
begin
for i := 0 to ParamCount do
memo1.Lines.Add('Параметр '+IntToStr(i)+' = '+ ParamStr(i));
end;Цитата:
Код:
if ParamCount > 0 then tlnt(ParamStr(1), ParamStr(2)); |
|
#13
|
|||
|
|||
|
Цитата:
Вставил процедуру в код, запустил через выполнить, открывается окно в нем мемо и ничего не делается. А куда вставлять вот это: Код:
if ParamCount > 0 then tlnt(ParamStr(1), ParamStr(2)); Виноват, ступил. Все вставил, все заработало. Это не так важно,но хотелось бы посмотреть как он это делает, а он как на зло не выводит в мемо. Не работает idTelnetdataAvailable. Помогите сним. Люди ну помогите, опять те же грабли. Подключается к оборудованию по своему желанию. Как вывести в мемо, чтобы хотя бы видеть что не получается? может он подключается а команды не правильно отправляет? Может он вообще не подключается и просто стоит открытый. Хотя через командную строку вижу что подключается. Как быть? Что делать? Не понятно почему перестал выводить в мемо. на данный момент выглядит все так: Код:
procedure TForm1.snd(ds: string);
begin
for i:=1 to length(ds) do idtelnet1.SendCh(ds[i]);
idtelnet1.SendCh(#13);
end;
procedure TForm1.IdTelnet1DataAvailable(Sender: TIdTelnet; const Buffer: String);
const
CR=#13;
LF=#10;
var
str: string;
begin
if Length(Buffer)>0
then begin
str:=StringReplace(Buffer,#13#10#13,#13#10,[rfReplaceAll, rfIgnoreCase]);
str:=StringReplace(str,#13#10#13#10#10#13,#13#10#13#10,[rfReplaceAll, rfIgnoreCase]);
Memo1.Lines.Add(str);
end;
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.FormShow(Sender: TObject);
begin
// for i := 0 to ParamCount do
// memo1.Lines.Add('Параметр '+IntToStr(i)+' = '+ ParamStr(i));
if ParamCount > 0 then tlnt(ParamStr(1), ParamStr(2));
// Application.Terminate;
end;Последний раз редактировалось darchken, 18.06.2013 в 17:10. |