MIAGE 3ème année
1998 - 1999
Objectifs :
Il s'agit d'écrire
un protocole de communication basé sur des sockets. Il permettra
l'échange de messages entre un serveur et un client distant.
L'implémentation se fera
en Java en utilisant les sockets du package java.net.
Cet exercice vous permettra aussi de manipuler les threads java
(java.lang.Thread)
pour obtenir un serveur multiclients acceptant et traitant plusieurs
connexions simultannées de clients distants.
Vous pourrez vous aider du TD
Numéro 2 et de mon cours "programmation
réseau en Java" (postscript compréssé)
Notions à connaître :
allez voir cette page de rappels rapides sur l'utilisation
des sockets en Java
Travail à réaliser : implantation
de communications avec accusé de réception
Une méthode fiable pour envoyer des messages est de fournir
un accusé de réception (Acknowledge abrégé
ACK pour la suite) chaque fois qu'un message est reçu.
Comme le montre la figure ci-dessous, le principe est simple à
mettre en oeuvre : lorsqu'un client réalise une requête au
serveur, il obtient une réponse (en fait, on combine une réponse
et un ACK).
Une fois la réponse entièrement reçu, le client
donne lui aussi un accusé de réception au serveur.

C'est ce protocole qui devra être implanté.
Eléments pour l'implémentation :
Vous créerez un serveur multiclients en implémentant les 2 classes suivantes :
L'exécution de cette application client-serveur avec 2 clients peut avoir l'allure suivante :
cocher> java AckServeur
Serveur à l'écoute sur
le port : 45678
Serveur : receive ACK from client
pit
Serveur : receive ACK from client
pat
Serveur : receive ACK from client
pat
>java AckClient cocher pit
Connexion : mycpu/189.154.12.87 port:
45678
?toto
!TOTO
?fin
Connexion terminée
>java AckClient cocher pat
Connexion : mycpu/189.154.12.87 port:
45678
?tata
!TATA
?tutu
!TUTU
Le "?" indique que le client attend un message de l'utilisateur. Le "!" préfixe le service rendu par la connexion.