PC SOFT

DOCUMENTATION EN LIGNE
DE WINDEVWEBDEV ET WINDEV MOBILE

  • Présentation
  • Principe de communication par sockets
  • Etape 1 : Création du socket
  • Etape 2 : Attente de connexion sur le socket
  • Exemple
  • Etape 3 : Échange de données
  • Etape 4 : Terminer la communication
  • Mode de transmission des informations
WINDEV
WindowsLinuxUniversal Windows 10 AppJavaEtats et RequêtesCode Utilisateur (MCU)
WEBDEV
WindowsLinuxPHPWEBDEV - Code Navigateur
WINDEV Mobile
AndroidWidget AndroidiPhone/iPadWidget iOSApple WatchCatalystUniversal Windows 10 AppWindows Mobile
Autres
Procédures stockées
Présentation
WINDEV offre la possibilité de créer un serveur de sockets standard. Ce serveur permet de gérer la connexion de plusieurs postes client sur un même socket. Ce principe est utilisé par exemple pour créer un serveur de news.
Versions 23 et supérieures
Universal Windows 10 App Cette fonctionnalité est désormais disponible en mode Universal Windows 10 App.
Nouveauté 23
Universal Windows 10 App Cette fonctionnalité est désormais disponible en mode Universal Windows 10 App.
Universal Windows 10 App Cette fonctionnalité est désormais disponible en mode Universal Windows 10 App.
Principe de communication par sockets

Etape 1 : 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. Il est possible de créer plusieurs sockets, chaque socket utilisant un numéro de port spécifique. A chaque socket est associé un nom (permettant de manipuler le socket par programmation) et un numéro de port.

Etape 2 : Attente de connexion sur le socket

Tous les postes souhaitant communiquer avec le poste serveur peuvent se connecter sur le socket : ce sont des postes clients. Le poste serveur gère les différentes demandes de connexion des postes clients grâce à la fonction SocketAttendConnexion. Cette fonction permet de savoir si une demande de connexion est réalisée sur un socket spécifique.
Il est conseillé d'utiliser la fonction SocketAttendConnexion dans un thread spécifique. Cette fonction est ainsi exécutée en tâche de fond. Lorsque une demande de connexion est détectée, il est possible :
  • soit d'accepter la connexion (fonction SocketAccepte) : dans ce cas, un canal de communication spécifique est créé. 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 plus de détails sur les threads, consultez Gestion des threads.)
  • soit de refuser la connexion (fonction SocketRefuse)

Exemple

L'exemple suivant permet de créer un socket sur le poste serveur et de gérer les connexions des postes clients dans un thread. Si la connexion est acceptée, la gestion de cette connexion est réalisée dans un thread spécifique.
Il y a un thread exécuté par connexion. Chaque thread utilise la même fonction de service "ProcédureGestion". Pour autoriser l'exécution de la procédure par différents threads simultanément, il est nécessaire de changer le mode de synchronisation des threads : utilisez la fonction ThreadMode avec la constante ThreadSectionCritique dans le code d'initialisation du projet. La synchronisation entre threads doit être effectuée manuellement (pour plus de détails, consultez l'aide sur les threads).
Pour différencier les threads, le nom de chaque thread correspond à celui du canal de communication (nom unique).
SI PAS SocketCrée("Serveur", 8000) ALORS
        Erreur("erreur création " + ErreurInfo(errMessage))
SINON
        ThreadExécute("Thread1", threadNormal, ProcédureAttente)
FIN
PROCEDURE ProcédureAttente()
BOUCLE
        SI SocketAttendConnexion("Serveur") ALORS
                Canal est une chaîne
                Canal = SocketAccepte("Serveur")
                ThreadExécute(Canal, threadNormal, ProcédureGestion, Canal)
        FIN
FIN

Etape 3 : Échange de données

Lorsque deux postes utilisent le même socket, un canal 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.
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 dans 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 et lui envoie une réponse.

Etape 4 : Terminer la communication

Pour terminer la communication, il suffit de fermer le socket avec la fonction SocketFerme.
Mode de transmission des informations
Le mode de transmission du message définit le mode utilisé pour déterminer la longueur du message.
WINDEV propose plusieurs méthodes pour déterminer la longueur du message lors de la communication entre sockets.
  • Méthode 1 : mode WINDEV : Par défaut, le nombre de caractères du message est indiqué au début du message. Ce mode de transmission est conseillé lors d'une communication par sockets entre deux applications WINDEV.
    Le message est de la forme : "11\r\nHelloWord"
  • Méthode 2 : mode standard : La fin du message est signalée par un caractère spécifique, déterminé par avance. Ce mode de transmission est conseillé lors d'une communication par sockets entre une application WINDEV et une autre application. Dans ce cas, il sera nécessaire d'inclure un caractère spécifique dans le message afin d'indiquer que le message est terminé.
    Le message est de la forme : "Hello world<EOF>"
  • Méthode 3 : mode standard avec buffer : Correspond au mode standard optimisé pour les protocoles les plus utilisés sur Internet.
La fonction SocketChangeModeTransmission permet de modifier le mode de transmission utilisé.
Version minimum requise
  • Version 9
Documentation également disponible pour…
Commentaires
Cliquez sur [Ajouter] pour publier un commentaire