:: Enseignements :: Master :: M1 :: 2016-2017 :: Programmation d'applications réseaux ::
[LOGO]

Serveurs TCP, implémentations de la concurrence


Exercice 1 - Serveur Somme de Long itératif

On souhaite maintenant écrire notre propre classe qui implante un serveur TCP rendant le service de somme de long, tel que vu au TP précédent:
  • le client envoie un INT (en big endian) donnant le nombre d'opérandes puis chacun des opérandes qui sont des LONG en big endian;
  • le serveur répond par un LONG qui correspond à la somme des opérandes.
  • Le serveur ne ferme pas la connection qui peut donc être utilisée pour faire plusieurs sommes pendant la même connexion cliente.
La première version de ce serveur, IterativeLongSumServer, un peu simpliste, se contente d'accepter un client, de traiter ses requêtes (éventuellement plusieurs sommes), et lorsque la connexion est fermée, il accepte un client suivant, et ainsi de suite.

Pour écrire ce serveur, vous vous baserez sur la trame ci-dessous.

Il se lance par exemple avec java fr.upem.net.tcp.IterativeLongSumServer 7777

Vous pouvez le testez avec votre client réalisé lors d'un TP précédent: java fr.upem.net.tcp.ClientLongSum localhost 7777

Que se passe-t-il si deux clients tentent d'accéder au service simultanément?
Le client arrivé en second est il connecté? accepté? servi?
Est-ce que le comportement est le même qu'en UDP?

Pour vous aider à mieux comprendre ce qui se passe, vous pouvez utiliser le ClientLongSumVerbose.jar, qui se connecte au serveur, et lui envoie successivement 5 salves d'opérandes à sommer, en attendant entre chaque salve un délai paramétrable sur la ligne de commande.

Par exemple, dans deux fenêtres de shell distictes, lancez presque simultanément
java -jar ClientLongSumVerbose.jar localhost 7777 2000
et
java -jar ClientLongSumVerbose.jar localhost 7777 100

Exercice 2 - Serveur Somme de Long concurrents

On veut maintenant permettre à plusieurs clients d'être servis simultanément par le serveur. Pour cela, nous allons devoir créer plusieurs threads.