Serveurs multiples - Domaine Internet
© D. Mathieu mathieu@romarin.univ-aix.fr
I.U.T.d'Aix en Provence - Département Informatique
Créé le 01/10/1999 -
Dernière mise à jour : 26/11/2001

Remarques préliminaires :
-
Créer le répertoire dirserv qui sera le répertoire courant.
Sommaire
Serveur multi-protocoles mono-service mono-processus
exo_01cudp : ppal() du client daytime non connecté
exo_01ctcp : ppal() du client daytime connecté
exo_01s : ppal() du serveur daytime tcp et udp
Serveur multi-protocoles multi-services mono-processus
exo_02s : ppal() du serveur
exo_02ctcp : ppal() du client echo connecté
exo_02cudp : ppal() du client echo non connecté
Serveur parallèle multi-protocoles multi-services multi-processus
exo_03s : ppal() du serveur
Serveur multi-threads
exo_04s : ppal() du serveur
Serveur multi-protocoles mono-service mono-processus
exo_01
-
Liste des fichiers créés ou modifiés :
exo_01s.cxx,
exo_01cudp.cxx,
exo_01ctcp.cxx,
ScriptDaytime
exo_01cudp : ppal() du client daytime non connecté
Recopier le fichier dirsidgram/exo_09c.cxx dans le fichier exo_01cudp.cxx.
exo_01ctcp : ppal() du client daytime connecté
Recopier le fichier dirsistream/exo_02c.cxx dans le fichier exo_01ctcp.cxx.
exo_01s : ppal() du serveur daytime tcp et udp
Recopier le fichier dirsidgram/exo_09s.cxx dans le fichier exo_01s.cxx.
Ajouter le fichier dirsistream/exo_02s.cxx dans le fichier exo_01s.cxx.
Fusionner les deux programmes pour faire un serveur concurrent multi-protocoles (TCP/UDP) mono-processus mono-service (time) : il offre en permanence deux sockets, l'une de communication en mode non connecté (UDP) sur laquelle il peut recevoir des requêtes de clients, l'autre de connexion en mode connecté (TCP).
S'il reçoit une requête sur cette dernière, il crée une socket de communication, rend le service, referme la socket de communication et retourne en attente d'une requête.
Le numéro de port peut être fixé ou attribué
arbitrairement par le système.
Utiliser le même numéro de port pour les deux protocoles.
Remarque : pour faciliter la compréhension, il est recommandé d'isoler le service dans deux fonctions, DaytimeUDP() et DaytimeTCP() par exemple, et de ne laisser dans la fonction ppal() que l'architecture générale.
Compiler et tester en lançant plusieurs clients, par exemple au moyen d'un script.
Corrigés :
exo_01s.cxx
-
exo_01cudp.cxx
-
exo_01ctcp.cxx
Sommaire
Serveur multi-protocoles multi-services mono-processus
exo_02
-
Liste des fichiers créés ou modifiés :
exo_02s.cxx,
exo_02cudp.cxx,
exo_02ctcp.cxx,
ScriptDaytimeEcho
exo_02s : ppal() du serveur
Recopier le fichier exo_01s.cxx dans le fichier exo_02s.cxx,
Ajouter les deux sockets nécessaires pour fournir un deuxième service (echo) dans les deux protocoles TCP et UDP.
Le serveur devra afficher les deux numéros de port, donnés par le système, en précisant à quel service ils correspondent.
On se servira du code écrit dans le fichier dirsistream/exo_07s.cxx
exo_02ctcp : ppal() du client echo connecté
Recopier le fichier dirsistream/exo_05c.cxx dans le fichier exo_02ctcp.cxx
exo_02cudp : ppal() du client echo non connecté
Recopier et le fichier dirsidgram/exo_10c.cxx dans le fichier exo_02cudp.cxx.
Compiler.
Tester le serveur avec tous les clients actuels du répertoire dirserv, par exemple au moyen d'un script.
Corrigés :
exo_02s.cxx
-
exo_02cudp.cxx
-
exo_02ctcp.cxx
-
ScriptDaytimeEcho
Sommaire
Serveur parallèle multi-protocoles multi-services multi-processus
exo_03
-
Liste des fichiers créés ou modifiés :
exo_03s.cxx
exo_03s : ppal() du serveur
Recopier le fichier exo_02s.cxx dans le fichier exo_03s.cxx.
Transformer les services concurrents en services parallèles en créant des processus fils (au moins pour le service echo connecté).
Corrigés :
exo_03s.cxx
Sommaire
Serveur multi-threads [1]
-
Liste des fichiers créés ou modifiés :
exo_04s.cxx,
Makefile
Recopier le fichier exo_03s.cxx dans le fichier exo_04s.cxx.
Transformer le(s) processus fils en thread(s).
La librairie libthread doit être ajoutée à l'édition de liens.
Compiler et tester.
Corrigés :
exo_04s.cxx
-
Makefile
Sommaire
[1]
A propos des threads, on pourra utiliser la commande xman, en recherchant dans la section (3) Subroutines, toutes les fonctions préfixées par pthread_.
Voir aussi la documentation jointe,
Threads: Basic Theory and Libraries
tirée du cours
Programming in C.