![]() |
[Indy] Pingen
Morgen. Ich habe einen TIdICMPClient und will jetzt nen Host pingen. Mein bisheriger Code:
icmp.host:='127.0.0.1'; icmp.ping; with icmp.receive(100) do showmessage(FromIPAddress); Eigentlich müsste da nach ner Millisekunde ne Messagebox mit '127.0.0.1' kommen. Tuts aber nicht. Es kommt ne Messagebox mit '0.0.0.0', also ein Ping-Timeout. Und das bei der Loopbackadresse? Beim Localhost? Im cmd mit ping ::1 gehts. ping 127.0.0.1 natürlich auch. Ich kann das Timeout auch auf 10 Sekunden hochschrauben, hilft auch nix. Seltsamerweise gehts, wenn ich ein OnReply Event definiere und dort die Messagebox ausgeben lasse. Für meine Zwecke ist das aber sehr unpraktisch. |
Re: [Indy] Pingen
Wenn man sich den Quellcode vom idcmp anschaut, scheint das so gewollt zu sein:
Delphi-Quellcode:
Grüße
function TIdIcmpClient.Receive(ATimeOut: Integer): TReplyStatus;
var BytesRead : Integer; Size : Integer; StartTime: Cardinal; begin FillChar(bufReceive, sizeOf(bufReceive),0); Size := sizeof(bufReceive); StartTime := GetTickCount; repeat BytesRead := ReceiveBuffer(bufReceive, Size, ATimeOut); GStack.CheckForSocketError(BytesRead); if DecodeResponse(BytesRead, Result) then begin break end else begin // The received reply wasn't for this request, so make sure we don't // report it as such in case we time out after this result.BytesReceived := 0; result.FromIpAddress := '0.0.0.0'; {Do not Localize} {<----------------------------------------} result.MsgType := 0; result.SequenceId := wSeqNo; result.TimeToLive := 0; result.ReplyStatusType := rsTimeOut; ATimeOut := Cardinal(ATimeOut) - GetTickDiff(StartTime,getTickCount); // compute new timeout value end; until ATimeOut <= 0; end; Klaus |
Re: [Indy] Pingen
Ich glaub, ich habs schon gelöst. Ich hab das Receive einfach rausgelassen. Hab den richtigen Code in nem Tut gefunden. Danke.
|
Re: [Indy] Pingen
wäre schön den link zu den tut zu posten oder den code,
ich denke das da andere auch intresse dran haben werden |
Re: [Indy] Pingen
jap... das würde mich auch mal interessieren wie du das gelöst hast, bzw. wie das in dem tut gemacht wird.
gruß fLeTCHeR |
Re: [Indy] Pingen
Über die Auswertung von
Delphi-Quellcode:
in
const AReplyStatus: TReplyStatus
Delphi-Quellcode:
TIdIcmpClient.OnReply
|
Re: [Indy] Pingen
Nope.
So:
Delphi-Quellcode:
Mal stark vereinfacht.
icmp.ping;
showmessage(icmp.replystatus.fromipaddress); Guckt mal auf ![]() |
Re: [Indy] Pingen
Naja... nur ist das Ereignis genau dafür gedacht, die Rückgabe vom angepingten Server auszuwerten.
|
Re: [Indy] Pingen
Ja. Aber wenn ich jetzt mehrere Knoten durchpinge ist das mehr als unpraktisch. Beispielsweise bei einem TraceRoute.
|
Re: [Indy] Pingen
In der Fragestellung war davon so aber nicht die Rede... wenn du das in einer while-schleife oder so durchpingst isses effizienter, ja
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:02 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz