請教TIdTelnet問題-如何得知執行Script完畢? |
答題得分者是:zycagod
|
JammyHsu
一般會員 發表:14 回覆:39 積分:10 註冊:2003-09-08 發送簡訊給我 |
問題:
整個telnet程式不等命令完成就斷線, 導致testfile沒有建立
如果我在OnDataAvailable加入ShowMessage(Buffer), 則無誤
我想, 應該是程式執行快, 沒有等待結果回應就已經執行disconnect
不知有什麼可用的訊息得知已完成所有的命令? cmdlist:=TStringList.Create;
cmdlist.Add('username');
cmdlist.Add('password');
cmdlist.Add('rm -f testfile');
cmdlist.Add('echo `date` '+aryEMail[2]+' > testfile');
cmdlist.Add('crontab -l >> testfile');
Telnet('host.xxx.xxx.xx', 23, cmdlist); 程式如下:
procedure TfmAGCReport.Telnet(const tServer: String; const tPort: Integer; const tCmdList: TStringList);
var
i, j: Integer;
CmdStr: String;
begin
with IdTelnet1 do
begin
Host:=tServer;
Port:=tPort;
try
if Connected then Disconnect;
Connect;
for i:=0 to tCmdList.Count-1 do
begin
CmdStr:=tCmdList.Strings[i];
for j:=1 to Length(tCmdList.Strings[i]) do
SendCh(CmdStr[j]);
SendCh(#13);
end;
Disconnect;
ShowMessage('遠端控制命令傳送完畢!');
except
on E: Exception do
ErrorMessage('遠端控制命令傳送失敗:'+E.Message);
end;
end;
end;
|
zycagod
一般會員 發表:0 回覆:14 積分:12 註冊:2002-07-08 發送簡訊給我 |
|
JammyHsu
一般會員 發表:14 回覆:39 積分:10 註冊:2003-09-08 發送簡訊給我 |
引言: 應該是叫你打Username 再鍵入Username,叫你打Password 再打Password. 你這樣寫不是一下就送完 全部指令了? Var TestStr:String; procedure TForm1.Telnet1DataAvailable(Sender: TIdTelnet; const Buffer: String); begin 請善用此Buffer. end; 發表人 - zycagod 於 2004/03/09 16:36:52我知道你的意思 我用'login:' 'Password:' '@mail)/' 來比對回應的Buffer 是可行的 只是這樣子, 萬一顯示的大小寫或內容不一樣 比如進入mail server後的shell提示字元不同, 不就變成無窮迴圈 當然我可以加入timeout計數 只是感覺不夠好 -- |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |