Upload
lachir
View
1.142
Download
8
Embed Size (px)
DESCRIPTION
Cours sur l'utilisation du composant Indy dans la programmation réseau.
Citation preview
TS Informatique Option RéseauDelphi programmation des sockets Mme Aissat
La programmation réseau avec les sockets
Dans le contexte réseau, on peut traduire le socket par « Connecteur réseau ».
Un socket est un élément logiciel qui permet à deux ordinateurs de communiquer par le billet du protocole TCP/IP.
Le but est de pouvoir transférer des données ou échanger des données d’un ordinateur à un autre.
La communication se fait entre deux processus (deux sources) : un programme serveur, et un programme client.
Fonctionnement :
Côté serveur : le programme serveur ouvre une connexion socket par un port et se met à l’écoute des requêtes de programme client.
Côté client : le programme client se connecte à l’ordinateur du programme serveur par l’adresse IP et le numéro du port.
Une fois la connexion établie, le client et le server peuvent s’envoyer des requêtes librement.
Utilisation du composant Indy
Dans Delphi, pour établir une connxion en utilisant les socket on manipule les deux composant :
IdTCPClient de la palette des composants Indy-Client pour le client
et IdTCPServer de la palette des composants Indy-Server pour le serveur .
Programme serveur Programme client
TS Informatique Option RéseauDelphi programmation des sockets Mme Aissat
Application 1:
Création d’un programme Client :
1- Préparer la connexion entre server et client :Réaliser la fenêtre :
Ajouter le composant IdtcpClient de la palette «indy-client ». changer le name en Client1. Ajouter un composant shape de « Supplément »
La connexion :
procedure TForm1.BconnexionClick(Sender: TObject);begin Client1.Port:= strtoint(Eport.text);(* spécifier le port*) Client1.Host:=Edit1.Text; (* Spécifier l'adresse IP du serveur.*) Client1.connect; (* demander d’établir une connexion*) Shape1.Brush.Color := clblue; (* Brush Spécifie la couleur et le motif utilisés pour remplir le contrôle forme.*)end;
La déconnexion :
procedure TForm1.Button1Click(Sender: TObject);begin Client1.Disconnect; (* se déconnecter*) Shape1.Brush.Color := clred;end;
TS Informatique Option RéseauDelphi programmation des sockets Mme Aissat
Création d’un programme Server:
Réaliser la fenêtre suivante :
Le composant TIdTCPServer de Indy-Server nommer le server1.
La connexion :
procedure TForm1.BconnexionClick(Sender: TObject);begin Server1.DefaultPort:= strtoint(eport.Text); server1.Active := true; (*ouvre la une connexion d'écoute qui rend le socket attentif aux demandes des clients.*) Ehost.text:= server1.localname;(*localname Indique le nom du système local.*) Shape1.Brush.Color := clblue;end;
la déconnexion
procedure TForm1.BdeconnexionClick(Sender: TObject);begin Server1.Active := false; (* se déconnecter*) Shape1.Brush.Color := clred;end;
Pour vérifier la connexion, ajoutant un Mémo et programmant l’événement Onconnect.L’évenement Onconnect se déclenche lorsqu’un client tente de se connecter.
procedure TForm1.server1Connect(AThread: TIdPeerThread);begin memo1.Lines.Add ('Connecter de: ' + AThread.Connection.Socket.Binding.PeerIP);
end;
TS Informatique Option RéseauDelphi programmation des sockets Mme Aissat
AThread.Connection.Socket.Binding.PeerIP permet de connaitre l’adresse ip (PeerIp) de la connexion (Athread représente le processus qui a demandé la connexion )Exemple l’éxecution :
Niveau client :
Niveau seveur
TS Informatique Option RéseauDelphi programmation des sockets Mme Aissat
Application 2 : Envoyer des messages du client au serveur:
Ajouter les composants un Bouton, un Edit comme suit :
procedure TForm1.BenvoyerClick(Sender: TObject);begin client1.WriteLn(etext.Text); (* envoyer un message de type string à la connexion courante *)end;
Pour que le socket serveur lise des informations dans un socket client, on programme l’événement OnExecute :
OnExecute est déclenchée pour répondre le processus demandeur et ce dernier est passé comme paramètres (Athread).
procedure TForm1.server1Execute(AThread: TIdPeerThread); var text:string;begin text :=athread.Connection.readln(); memo1.Lines.add(text);end;
ou encore :
text :=athread.Connection.readln(); memo1.Lines.add( athread.Connection.socket.Binding.peerIp+ text);