PC SOFT

DOCUMENTATION EN LIGNE
DE WINDEV, WEBDEV ET WINDEV MOBILE

  • Ce que vous allez apprendre dans cette leçon
  • Présentation
  • Application Serveur : cas d'un serveur simplifié
  • Création du socket
  • Echange de données
  • Fermeture du socket
  • Application Cliente
  • Connexion au serveur
  • Echange de données
  • Fin de communication
  • Exemple pratique
  • Test de l'exemple
  • Analyse du code utilisé
Leçon 7.7. Les sockets
Ce que vous allez apprendre dans cette leçon
  • Présentation.
  • Application Serveur.
  • Application Cliente.

Durée estimée : 20 mn
Leçon précédenteSommaireLeçon suivante
Présentation
WINDEV met à votre disposition des fonctions qui permettent de réaliser une gestion avancée des sockets.
Un socket est une ressource de communication utilisée par les applications pour communiquer d'une machine à une autre sans se soucier du type de réseau.
Ce mode de communication est utilisé pour faire communiquer deux applications, situées sur des postes différents (reliés par Internet ou sur un même réseau local) ou sur un même poste.
Une application WINDEV peut gérer les sockets selon différents modes :
  • Application WINDEV Cliente : l'application se connecte à un serveur quelconque et échange des données par un socket.
  • Application WINDEV, WEBDEV ou WINDEV Mobile "Serveur" : l'application WINDEV (ou WEBDEV ou WINDEV Mobile) est un serveur, échangeant des informations par sockets avec plusieurs postes client quelconques. Pour gérer plusieurs connexions simultanées, il est nécessaire d'utiliser des threads.

Exemple

WINDEV est livré en standard avec un exemple didactique permettant de comprendre l'utilisation des sockets : "WD Utilisation des sockets". Cet exemple est accessible depuis la fenêtre de bienvenue de WINDEV (Ctrl + <).
Application Serveur : cas d'un serveur simplifié
WINDEV offre la possibilité de créer un serveur de sockets simplifié. Ce serveur permet de communiquer avec un seul poste client simultanément. Ce type d'application est très utile lorsque deux applications distantes ont besoin de communiquer.
Les étapes pour créer un serveur simplifié sont les suivantes :
  1. Création du socket.
  2. Echange de données.
  3. Fermeture du socket.

Création du socket

Pour créer le socket, le poste serveur utilise la fonction SocketCrée. Un socket est associé à un port spécifique. Pour simplifier la manipulation du socket par programmation sur le poste serveur, précisez le nom du socket.
Le poste client va venir se connecter sur ce socket pour échanger des données. La connexion entre les deux postes sera effectivement réalisée au premier échange de données entre les deux postes (c'est-à-dire à la première lecture d'informations par le poste serveur).
La connexion est établie au premier succès de la fonction SocketLit sur le serveur.

Echange de données

Lorsque deux postes utilisent le même socket, un flux de communication s'établit entre ces deux postes. Il est alors possible pour ces deux postes de lire et d'écrire des chaînes de caractères sur le socket.
Remarque : Pour ne pas bloquer les applications, la gestion de la réception des messages est souvent gérée par un thread spécifique.
Pour lire et écrire sur le socket, l'application serveur WINDEV doit utiliser les fonctions SocketLit et SocketEcrit.
Attention : Pour réaliser une lecture, une écriture doit avoir été réalisée. Par exemple :
  1. Le poste client écrit sur le socket : il envoie une requête au poste serveur.
  2. Le poste serveur effectue une lecture sur le socket dans un thread. Dès qu'un message est reçu, le message est traité par le poste serveur.
  3. Si une réponse au message est nécessaire, le poste serveur identifie le poste client (fonction SocketClientInfo) et lui envoie une réponse.

Fermeture du socket

Pour terminer la communication, le serveur peut fermer le socket avec la fonction SocketFerme.
Remarque : le socket peut aussi être fermé par le poste client.
Application Cliente
Une application cliente d'un serveur de sockets se connecte à un serveur quelconque pour échanger des informations par l'intermédiaire d'un socket.
Exemple : Une application WINDEV cliente peut se connecter à un serveur de news standard sur Internet.
Les étapes pour créer une application cliente sont les suivantes :
  1. Connexion au serveur.
  2. Échange de données.
  3. Fin de communication.

Connexion au serveur

Pour se connecter à un socket du serveur, il suffit d'utiliser la fonction SocketConnecte. Cette fonction permet d'effectuer une demande de connexion au serveur.
Le socket est identifié par son port et par son adresse.

Echange de données

Lorsque deux postes utilisent le même socket, un flux de communication s'établit entre ces deux postes. Il est alors possible pour ces deux postes de lire et d'écrire des chaînes de caractères sur le socket.
Remarque : Pour ne pas bloquer les applications, la gestion de la réception des messages est souvent gérée par un thread spécifique.
Pour lire et écrire sur le socket, l'application cliente WINDEV doit utiliser les fonctions SocketLit et SocketEcrit.

Fin de communication

Pour terminer la communication, il suffit de fermer le socket depuis le poste client avec la fonction SocketFerme.
Remarque : il est également possible de terminer la communication depuis le poste serveur.
Exemple pratique
Nous avons choisi de vous présenter un cas réel de la programmation des sockets grâce à l'exemple unitaire "Utilisation des sockets".

Test de l'exemple

  • Ouvrez l'exemple unitaire "Utilisation des sockets".
  • Lancez le test de la fenêtre "FEN_Socket". Nous allons envoyer un message du poste B au poste A. Le poste A est l'application Serveur et le poste B est l'application Cliente.
    1. Sur le poste A, créez le socket en cliquant sur le bouton "Créer".
    2. Le poste B peut alors se connecter au socket créé par le poste A. Il suffit de cliquer sur le bouton "Connecter" (dans la partie Poste B).
    3. Le poste B envoie un message au poste A :
      • Saisissez le message à envoyer dans la zone "Phrase à envoyer au poste A".
      • Cliquez sur le bouton "Envoyer" présent dans la zone "Poste B".
    4. Pour récupérer le message sur le poste A, cliquez sur le bouton "Récupérer" dans la zone "Poste A".
    5. Déconnectez les deux postes en cliquant sur les boutons "Déconnecter".
  • Arrêtez le test de la fenêtre pour revenir sous l'éditeur.

Analyse du code utilisé

  • Etudions le code des différents boutons que nous avons utilisés.
  • Nous allons tout d'abord étudier les traitements réalisés par le serveur de sockets (le poste A).
    1. Affichez le code du bouton "Créer" dans la zone Poste A :
      • Sélectionnez le bouton "Créer".
      • Affichez les traitements grâce à la touche F2.
    2. Dans le traitement "Clic sur", nous retrouvons la fonction SocketCrée qui permet de créer le socket. Fermez l'éditeur de code.
    3. Affichez le code du bouton "Récupérer" dans la zone Poste A :
      • Sélectionnez le bouton "Récupérer".
      • Affichez les traitements grâce à la touche F2.
    4. Dans le traitement "Clic sur", le code utilisé est le suivant :
      SAI_PhraseRecueDuPosteB = SocketLit("PosteA", Faux, 2000)
      SI SAI_PhraseRecueDuPosteB <> "" ALORS
      Info("Message reçu de l'adresse IP N° "+...
      SocketClientInfo("PosteA", SocketAdresse))
      FIN
      Nous retrouvons la fonction SocketLit qui permet de lire le socket précédemment créé. Le message lu est immédiatement affiché dans le champ "SAI_PhraseRecueDUPosteB". Fermez l'éditeur de code.
  • Etudions maintenant les traitements réalisés par le client (le poste B).
    1. Affichez le code du bouton "Connecter" dans la zone Poste B :
      • Sélectionnez le bouton "Connecter".
      • Affichez les traitements grâce à la touche F2.
    2. Dans le traitement "Clic sur", nous retrouvons la fonction SocketConnecte qui permet de se connecter au socket créé par le poste A. Fermez l'éditeur de code.
    3. Affichez le code du bouton "Envoyer" dans la zone Poste B :
      • Sélectionnez le bouton "Envoyer".
      • Affichez les traitements grâce à la touche F2.
    4. Dans le traitement "Clic sur", le code utilisé est le suivant :
      SI PAS SocketEcrit("PourPosteA", ...
      SAI_PhraseAEnvoyerAuPosteA) ALORS
      Erreur(ErreurInfo(errMessage))
      RETOUR
      FIN
      Nous retrouvons la fonction SocketEcrit qui permet d'envoyer un message sur le socket auquel le poste B s'est connecté. Fermez l'éditeur de code.
Remarque : Dans cette leçon, nous avons vu une communication "simple" entre un serveur et un poste client : le client envoie des messages et le serveur traite les messages. Il est bien entendu possible de réaliser des applications plus élaborées.
Il est possible de réaliser une communication entre deux applications, à la fois cliente et serveur. Dans ce cas, la gestion des threads devient primordiale pour gérer les envois et les réponses des applications.
Leçon précédenteSommaireLeçon suivante
Version minimum requise
  • Version 23
Commentaires
Cliquez sur [Ajouter] pour publier un commentaire