Leider wie immer zu früh gefreut. Es klappt nicht immer, nur in etwa 99% aller Fälle.
Manchmal bekommt man aus unerklärlichen Gründen doch die message too long Meldung.
Ich habe mir auch die Pakete mit Wireshark angesehen, und dabei festgestellt, dass die im Programm angegebene Packetsize nicht mit der Größe im wireshark übereinstimmt.
Z.B. Packetsize 24 in Delphi ergibt in der realität 28. So kann es natürlich leicht passieren, dass eine Message als "too long" zurückkommt.
Ich habe etwas getrickst und die Meldung um 4 verringert, und siehe da, es geht.
Leider auch nicht immer!
In Sonderfällen passiert es auch weiterhin, dass die Größe nicht stimmt.
Da ich alle Tipps aus dem Internet ausprobiert habe, ist es nun eindeutig noch ein Bug in der
Indy Bibliothek. Hoffen wir mal, dass es irgendwann noch behoben wird.
Aktueller Code:
Code:
IdICMPClient1 := TIdIcmpClient.Create;
IdICMPClient1.ReceiveTimeout := 5000;
IdICMPClient1.packetsize := 24;
IdICMPClient1.Protocol := 1;
IdICMPClient1.IPVersion := Id_IPv4;
IdICMPClient1.OnReply := form1.IdIcmpClient1Reply;
IdICMPClient1.Host := TestIpAdress;
try
// Buffer Länge über Wireshark ermittelt
ABuffer := StringOfChar('x', IdICMPClient1.packetsize -4 );
IdICMPClient1.Ping(ABuffer);
finally
freeandnil(IdICMPClient1);
end;