(Delphi 2009 사용) Indy TidIcmpClient를 사용하여 간단한 네트워크 연결 모니터를 작성하려고합니다. 아이디어는 주소를 ping 한 다음 첨부 된 TidIcmpClient.OnReply 핸들러에서 반환 된 데이터의 양을 테스트하는 것입니다. 응답이> 0 바이트를 포함하면 연결이 성공했음을 알았지 만 TidIcmpClient가 시간 초과되었거나 응답에 0 바이트가 포함 된 경우 링크가 다운 된 것으로 가정합니다.Indy TIdIcmpClient - 시간 초과를 감지하는 방법?
TidIcmpClient의 논리를 이해하는 데 어려움이 있습니다. 'OnTimeout'이벤트가 없습니다.
두 개의 하위 질문에 ...
합니까 TidIcmpClient.OnReply 어쨌든 호출되는, 하나의 (a) 데이터가 수신 될 때 또는 (b) 제한 시간에 도달하면, 중 먼저?
0 바이트가 포함 된 시간 초과 기간 내에 실제 응답 시간 초과로 인해 0 바이트 응답을 구별 할 수 있습니까? 즉
확인 코드의 일종이다하거나
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