====== Prérequis ====== Le code ci-dessus requiert l'intégration de la suite de composants **Indy** distribués gratuitement sur le [[http://www.indyproject.org/|site de Indy Project]].\\ Les versions récentes de Delphi implémentent de base les composants issus de Indy. ====== Description ====== La fonction présentée sert à testé l'existence d'un serveur web à l'aide du composant **TIdTelnet** via l'adresse spécifiée.\\ Cette dernière prend deux paramètres: L'**adresse** en elle-même (Host) qui peut être remplis par un nom de domaine (example.com) ou une adresse IP (X.X.X.X), ainsi que le **Port** qui est par défaut à __80__ si celui-ci n'est pas indiqué.\\ La valeur de retour est de type booléen; ====== Rédaction ====== __[Note]__ Ajoutez l'unité **IdTelnet** aux clauses **uses** dans les premières lignes de votre code. function HostReachable(Address: String; const Port: Word = 80): Boolean; var T: TIdTelnet; // Déclaration de la variable T, utilisant la classe 'TIdTelnet' begin // Initialisation de la valeur de retour par défaut Result := False; // Initialisation de la classe T := TIdTelnet.Create(nil); // La variable 'Address' ne peut contenir le symbole de protocole 'http' ou // des slash '/' if (Pos('http://', Address) > 0) then Address := StringReplace(Address, 'http://', '', [rfIgnoreCase]); if (Pos('/', Address) > 0) then Address := StringReplace(Address, '/', '', [rfReplaceAll]); // Affectation de l'adresse spécifiée à la propriété de la classe T.Host := Address; // Affectation du port spécifié à la propriété de la classe T.Port := Port; // Tentative de connexion try try // Connexion à l'hôte T.Connect; // Attente de 100 millisecondes par sécurité Sleep(100); // Affectation de la valeur de retour, si la connexion à pu être établie, // la valeur de 'Connected' est modifiée par la classe elle-même. Result := T.Connected; except // Inutile d'affiché une éventuelle erreur de socket en cas d'échec, // la fonction s'occupera de renvoyer 'false' end; finally // Déconnexion if (T.Connected) then T.Disconnect; // Libération de la classe (très important) T.Free; end; end; ====== Conclusion ====== L'exemple montré n'est qu'une bride des possibilités réelles du composant et du protocole Telnet. L'usage de ICMP reste plus logique, mais plus contraignant en Delphi au vu des dernières sécurités mises en place sur Windows Vista/Seven par Microsoft qui lève beaucoup d'erreurs (accès refusé, désynchronisation, etc.).