AS201281 Wiki

Your check engine light is on!

User Tools

Site Tools


programming:delphi:delphi_host_reachable

Prérequis

Le code ci-dessus requiert l'intégration de la suite de composants Indy distribués gratuitement sur le 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.).

programming/delphi/delphi_host_reachable.txt · Last modified: 2021/01/04 20:41 by 127.0.0.1