Delphi Indy Ping Erreur 10040

J'ai un petit morceau de code qui vérifie si un ordinateur est vivant par la commande ping. Nous utilisons pour avoir une chambre avec 40 ordinateur et je veux vérifier à distance par le biais de mon programme qui est vivant.

Donc j'ai écrit un petit ping fonction à l'aide d'indy

function TMainForm.Ping(const AHost : string) : Boolean;
var
  MyIdIcmpClient : TIdIcmpClient;
begin
  Result := True;

  MyIdIcmpClient := TIdIcmpClient.Create(nil);
  MyIdIcmpClient.ReceiveTimeout := 200;
  MyIdIcmpClient.Host := AHost;

  try
    MyIdIcmpClient.Ping;
    Application.ProcessMessages;
  except
    Result := False;
    MyIdIcmpClient.Free;
    Exit;
  end;
  if MyIdIcmpClient.ReplyStatus.ReplyStatusType <> rsEcho Then result := False;

  MyIdIcmpClient.Free;
end;

J'ai donc développé que chez moi, sur mon réseau wifi et tout simplement beau travail.

Quand je serai de retour pour le travail que j'ai testé et j'obtiens un message d'erreur indiquant que

Socket Errod # 10040 Message too long

Au travail, nous avons IPs fixes et tous les ordinateur et moi sommes dans le même sous-réseau.

J'ai essayé de le déconnecter de l'IP fixe et se connecter à la wifi qui est bien sûr DHCP et pas dans le même sous-réseau, et il est juste de travailler bien.

J'ai essayé de chercher sur internet pour cette erreur et comment la résoudre, mais n'ai pas trouvé beaucoup d'info.

Bien sûr, j'ai essayé de changer la taille par défaut du tampon à une plus grande valeur, mais ça n'a rien changé j'ai toujours l'erreur sur le fixe IP dans le même sous-réseau.

De plus, je ne sais pas si cela peut aider à trouver une solution, mais mon code traite des exceptions, mais dans ce cas, il faut environ 3-4 secondes pour soulever l'erreur alors que le Délai d'attente est fixé à 200 millisecondes. Et je ne peux pas attendre aussi longtemps sur chaque ping.

Par la façon dont j'utilise delphi 2010 et je pense que c'est indy 10. J'ai aussi testé sur les XE2 mais même erreur.

Toute idée

----- EDIT -----

Répondre à cette question, maintenant j'essaie d'avoir ce fonctionnement en multi thread et j'ai posé une autre question pour que
Delphi (XE2) Indy (10) Multithread Ping

peut-il y avoir de pare-feu bloquant ICMP activité ?
ne TidIcmpClient.OnReply appelée ?
j'ai essayé de changer la taille par défaut du tampon à une plus grande valeur Comment exactement ? montrer le code ? Peut-être que vous feriez mieux d'essayer de diminuer la place. Cet exemple une montre à l'aide de l'API Windows pour faire des pings et il taille de la mémoire tampon est de taille des messages qui ont déclaré être trop grand. Delphi Forum est également titulaire de la discussion de IdICMP ping
Ce code a une fuite de mémoire: si une exception se produit, le composant ne sera pas libéré. Et le propriétaire devrait être nul que vous le souhaitez gratuitement le composant lui-même dans la même méthode.
Tu as raison, j'ai Modifier mon code.

OriginalL'auteur HpTerm | 2012-10-04