|
|
|
|
|
- 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
Socket : créer un serveur de sockets standard
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.
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
PROCÉDURE 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 : - Le poste client écrit sur le socket : il envoie une requête au poste serveur.
- 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.
- 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.
Documentation également disponible pour…
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|