Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   idsmtp:Message too long - bei neuen Indy Bibliotheken? (https://www.delphipraxis.net/176399-idsmtp-message-too-long-bei-neuen-indy-bibliotheken.html)

andreasm82 2. Sep 2013 14:56

idsmtp:Message too long - bei neuen Indy Bibliotheken?
 
In der Version Indy10_4890 unter Delphi 7 und Win XP klappte Indy Ping problemlos. Ich konnte auch verschiedene Paketgrößen angeben.

Doch mit allen neueren Versionen schlägt Ping immer fehl. Aktuell habe ich Indy10_5051 getestet - auch dies war erfolglos.

Es kommen viele verschiedene Fehlermeldungen bei Ping. Auch Programmabstürze,
Pointerfehler traten bei den Versuchen auf.

aber meistens : Socket Error # 10040 Message too long


Mein Code:
form1.IdICMPClient1.ReceiveTimeout := 5100; <-- 5000 war auch nicht möglich
form1.IdICMPClient1.PacketSize := 16; <-- hier habe ich 16,24 und 1024 probiert
form1.IdICMPClient1.Host := TestIpAdress;
form1.IdICMPClient1.Ping(); <-- Auch mit Ping('Pingpong') kein Erfolg

Was könnte ich noch probieren?

andreasm82 26. Sep 2013 09:19

AW: idsmtp:Message too long - bei neuen Indy Bibliotheken?
 
Und auch neuere Versionen der Indy Bibliotheken funktionieren nicht.

Hat keiner eine Idee? :roll:

andreasm82 13. Dez 2013 09:21

AW: idsmtp:Message too long - bei neuen Indy Bibliotheken?
 
Hat hierzu jemand Neuigkeiten ?

mjustin 13. Dez 2013 12:10

AW: idsmtp:Message too long - bei neuen Indy Bibliotheken?
 
Die Indy Ping Komponente habe ich heute mal getestet mit Delphi 6. Aktuelle Indy 10.6, unter Windows 8: funktioniert. Ist sicher die 10.6 Version gefunden worden, nicht eine eventuell noch im Suchpfad enthaltenen ältere Version? Die Version lässt sich "auf die Schnelle" mit TIdIcmpClient.Create.Version ermitteln.

Tipp: Sourcecode mal hier posten, aber mit dynamisch erzeugter Indy Komponente. Dann geht es auch ohne eine komplette Deinstallation und Neuinstallation der Indy Komponenten, was sehr viel Zeit spart (vor allem wenn man beim Testen schnell zwischen verschiedenen Revisionen wechseln muss).

p.s. Betreff "idsmtp:..." sollte vermutlich "TIdIcmpClient:..." sein

Mein Code:

Delphi-Quellcode:
unit PingTestUnit;

interface

uses
  IdIcmpClient, Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
    procedure DoReply(ASender: TComponent; const AReplyStatus: TReplyStatus);
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
  Ping: TIdIcmpClient;
begin
  Ping := TIdIcmpClient.Create;
  try
    // Ping.Host := '127.0.0.1';
    Ping.Host := 'heise.de';

    Ping.OnReply := DoReply;
    Ping.Ping;
  finally
    Ping.Free;
  end;
end;

procedure TForm1.DoReply(ASender: TComponent;
  const AReplyStatus: TReplyStatus);
begin

  ShowMessage(TIdIcmpClient.Create.Version + #13#10
   + AReplyStatus.Msg + ' host ' + AReplyStatus.FromIpAddress);
end;

end.

andreasm82 3. Jan 2014 10:31

AW: idsmtp:Message too long - bei neuen Indy Bibliotheken?
 
Hallo,

danke für die Rückmeldung.

Installiert war bisher: indy 10 build 4890.
TIdIcmpClient.Create.Version gibt 10.5.9.4885 aus.
--> Funktioniert einwandfrei


Gerade die neueste Version getestet: indy 10 build 5079.
TIdIcmpClient.Create.Version gibt 10.6.0.5079 aus.

--> Ich werde verrückt, diese Version funktioniert scheinbar - leider nur manchmal.

Aber nur, wenn ich die Zeile "form1.IdICMPClient1.PacketSize := 1024" weglasse,
andernfalls erscheint wieder die Message too long meldung.
Und dies obwohl weiterhin noch 1024 im Feld PacketSize im Objektinspektor steht?!
Scheinbar mag die Ping Komponente keine Änderung der PacketSize während der Laufzeit.

Nachtrag: Bei manchen IP Adressen schlägt auch diese Version 10.6 fehl.
Z.B. funktioniert es, IP Adressen aus Zielnetzen anzupingen, die über openvpn erreichbar sind.
Andere Netze über andere VPN Arten schlagen fehl. Dies funktionierte mit der 10.5.9.4885 aber tadellos!
Wo ist der Fehler?

Allgemein: meine vorgehensweise für die Installation
- Ich lade die Dateien immmer von http://indy.fulgan.com/ZIP/ herunter, heute also Indy10_5079.zip
- mit winmerge schaue ich, was sich im groben geändert hat und ob ein Update Sinn macht
- Delphi 7 starten und alte indy bibliotheken löschen, Pfad aus Umgebungsvariablen entfernen
- Dann .zip Datei extrahieren nach c:\programme\borland\indyxxxx
- Darin die full_d7.bat ausführen
- In delphi 7 nun wieder die neuen beiden Bibliotheken einfügen (Packages installieren).




Den kompletten Sourcecode kann ich hier nicht posten, dies wäre zuviel. Weiter oben hatte ich ihn ja schon grob gezeigt.

andreasm82 3. Jan 2014 13:19

AW: idsmtp:Message too long - bei neuen Indy Bibliotheken?
 
Nachtrag.

Auch die Tipps von hier brachten keinen Erfolg.
Ich bin absolut ratlos!

http://stackoverflow.com/questions/1...ng-error-10040

andreasm82 13. Jan 2014 10:00

AW: idsmtp:Message too long - bei neuen Indy Bibliotheken?
 
Ich habe noch etwas probiert.

Neueste Indy 10 Version verwendet und die IdIcmpClient.pas Datei einfach gegen die ältere, funktionierte Datei aus dem indy 10 build 4890 ausgetauscht.

Funktioniert!

Schön wäre es dennoch, wenn die IdIcmpClient.pas auch offiziell in der neuesten Version funktionieren würde.
Es gibt sicherlich noch andere, die Ping verwenden :)

andreasm82 12. Jun 2015 08:05

AW: idsmtp:Message too long - bei neuen Indy Bibliotheken?
 
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;

ringli 12. Jun 2015 09:13

AW: idsmtp:Message too long - bei neuen Indy Bibliotheken?
 
Ich habe es selber nicht ausprobiert, aber vielleicht helfen dir folgende Links weiter:

http://www.delphipraxis.net/116530-p...-too-long.html
http://stackoverflow.com/questions/1...ng-error-10040
http://codeverge.com/embarcadero.del...orking/1074613

andreasm82 15. Jun 2015 12:33

AW: idsmtp:Message too long - bei neuen Indy Bibliotheken?
 
Die 3 Links kenne ich leider schon. Die Codes auf den Seiten haben leider auch nicht zuverlässig funktioniert.


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:56 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz