(使用Delphi 2009)我正在嘗試使用Indy TidIcmpClient編寫簡單的網絡連接監視器。想法是ping一個地址,然後在附加的TidIcmpClient.OnReply處理程序中測試返回了多少數據。如果答覆包含> 0字節,那麼我知道連接成功,但如果TidIcmpClient超時或答覆包含0個字節,我將假定鏈接已關閉Indy TIdIcmpClient - 如何檢測超時?
我很難理解TidIcmpClient的邏輯,因爲存在沒有'OnTimeout'事件。
兩個子問題...
不TidIcmpClient.OnReply得到反正叫,或者(a)接收到數據時或(b)達到超時時,以先到者爲準?
如何區分一個零字節的答覆,因爲在包含零字節的超時時間內(或不能發生這種情況)的實時回覆超時?
換句話說就是這種代碼確定或做我需要做一些別的事情要告訴它是否超時或不
procedure TForm1.IdIcmpClient1Reply(ASender: TComponent; const AReplyStatus: TReplyStatus);
begin
if IdIcmpClient1.ReplyStatus.BytesReceived = 0 then
//we must have timed out, link is down
else
//got some data, connection is up
end;
procedure DoPing;
begin
IdIcmpClient1.ReceiveTimeout := 200;
IdIcmpClient1.Host := '8.8.8.8';
IdIcmpClient1.Ping;
end;
非常有用的回覆雷米。這完全解釋了它。 – user3209752
@RemyLebeau爲什麼我得到套接字錯誤訪問被拒絕10013?防火牆關閉。 – grinner
好吧,發現這個:https://stackoverflow.com/questions/13611525/does-indy-ping-require-uac-elevation – grinner