如果說我要用IdIcmpClient來呈現PING的功能 |
答題得分者是:RaynorPao
|
tomas850
一般會員 發表:12 回覆:16 積分:5 註冊:2004-01-05 發送簡訊給我 |
|
RaynorPao
版主 發表:139 回覆:3622 積分:7025 註冊:2002-08-12 發送簡訊給我 |
引言: 如題,如果說我要用IdIcmpClient來呈現PING的功能, 但我在PING的時候,對方是未連線狀態。 我要一直PING到對方起來回應我為止。 我應該要如何做呢?? tomas850 你好: (1)這裡有一個範例 ><> (>>> < src="http://delphi.ktop.com.tw/loadfile.php?TOPICID=10003806&CC=223734"> -- Enjoy Researching & Developing -- 發表人 - RaynorPao 於 2004/03/31 23:49:24
------
-- 若您已經得到滿意的答覆,請適時結案!! -- -- 欲知前世因,今生受者是;欲知來世果,今生做者是 -- -- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 -- |
tomas850
一般會員 發表:12 回覆:16 積分:5 註冊:2004-01-05 發送簡訊給我 |
|
shinnuei
一般會員 發表:32 回覆:48 積分:21 註冊:2002-03-13 發送簡訊給我 |
奇怪了,我剛試了一下,很正常,完全不會有錯誤訊息…
我的 indy 也是 9.0.1.4。
不然你開一個新專案,再放上 Memo1,IdIcmpClient1,edtIP,btnPing
再貼上原本的程式碼,如下:
void __fastcall TForm1::btnPingClick(TObject *Sender) { btnPing->Enabled=false; Memo1->Lines->Add("Pinging \"" edtIP->Text "\"..."); try { IdIcmpClient1->ReceiveTimeout=1000; IdIcmpClient1->Host=edtIP->Text; for(int i=0; i<4; i ) { try { IdIcmpClient1->Ping(); Application->ProcessMessages(); } catch(Exception &e) { Memo1->Lines->Add("Request timed out."); } } } __finally { btnPing->Enabled=true; } Memo1->Lines->Add("End!"); Memo1->Lines->Add(""); } //--------------------------------------------------------------------------- void __fastcall TForm1::IdIcmpClient1Reply(TComponent *ASender, const TReplyStatus &AReplyStatus) { AnsiString szReport; if(AReplyStatus.FromIpAddress=="0.0.0.0" && AReplyStatus.TimeToLive==0) { szReport="Request timed out."; } else { if(AReplyStatus.MsRoundTripTime==0) { szReport.sprintf("Reply from %s: bytes=%d time<1ms TTL=%d", AReplyStatus.FromIpAddress, AReplyStatus.BytesReceived, AReplyStatus.TimeToLive); } else { szReport.sprintf("Reply from %s: bytes=%d time=%dms TTL=%d", AReplyStatus.FromIpAddress, AReplyStatus.BytesReceived, AReplyStatus.MsRoundTripTime, AReplyStatus.TimeToLive); } } Memo1->Lines->Add(szReport); } |
tomas850
一般會員 發表:12 回覆:16 積分:5 註冊:2004-01-05 發送簡訊給我 |
|
artist1002
高階會員 發表:2 回覆:155 積分:151 註冊:2002-09-26 發送簡訊給我 |
引言: Ping(AnsiString,unsigned short) 是我在輸入IdIcmpClient-> 之後帶出來的原型! 所以當我裡面是空白時會出問題..... 我試過8.X~9.X版都是一樣。 所以就在裡面隨便輸入二個參數給他。 例如:Ping("aaaa",0)。 結果是正確的,並不知道那個字串代表的是什麼東西。 是傳輸的內容??還是其它??關於Ping的參數問題, 先參考函數宣告如下 void __fastcall Ping(AnsiString ABuffer, Word SequenceID); 看原型說故事的解釋是 第一個AnsiString是提供Icmp的Request內容存放的Buffer 第二個則是Icmp封包序號 (用來識別收到Reply的和傳出去的Request配對關係,才能算出Time) 附帶解釋: 第一個AnsiString 給一個AnsiString變數就可以了,內容不用,因為只是提供空間來存放Request Buffer. 第二個在ㄧ般情況下給0就可以了,因為IdIcmpClient會自己增加這個數字,給0的話就是採用內部的序號. 如果想要自己控制Request和Reply才需要自訂數值. |
SENFO
一般會員 發表:13 回覆:22 積分:7 註冊:2006-07-10 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |