PACT

Travaux Pratiques

Client Serveur

Introduction

Ceci est un TP auto-évalué. Son but est de vous faire progresser dans la connaissance et l'utilisation des bases du module client-serveur. Quand vous avez compris et réussi un des exercices, vous pouvez passer au suivant. Ce TP n'est pas noté. Les exercices de la fin sont "à la carte". Il serait bon que vous arriviez à faire tous les exercices "obligatoires" et au moins commencer un optionnel pertinent pour votre projet dans la journée.

Préambule - Installation

Vous devez avoir une installation d'Eclipse qui marche. Mieux encore: vous avez installé et vous avez commencé à utiliser IntelliJ Community Edition (gratuit et plus performant que Eclipse)

Niveau 1: Apprenti(e)

Créez une application serverL1 et une application clientL1.

L'application serveur met en jeu une ServerSocket. Cherchez sur Internet des exemples d'utilisation de ServerSocket et construisez le plus petit exemple possible qui crée une ServerSocket sur un port fixe. Les éléments incontournables sont:

L'application clientL1 met en jeu une Socket. Les éléments incontournables sont:

ServerL1 et ClientL1 sont des applications "bêtes" qui ne font qu'afficher ce qu'elles reçoivent à la console et lire ce qu'elles doivent envoyer à la console aussi. En d'autres termes, quand la connection est établie, le client attend que vous tapiez une string, puis l'envoie au serveur qui affiche la string que vous avez tapé, le serveur attend que vous tapiez une string de son coté, puis l'envoie au client, et ainsi de suite.

Démarrez l'application ServerL1 sur votre machine. Démarrez l'application ClientL1 sur votre machine. Expérimentez des messages envoyés dans les deux sens.

Sauvez ClientL1 et ServerL1.

Niveau 2: Initié(e)

Créez ServerL2 et ClientL2 qui lisent le numéro du port de connection en argument. ClientL2 reçoit aussi le numéro IP du serveur.

Faites fonctionner *L2 entre deux machines. Vous aurez besoin de l'IP du serveur.

Si vous le pouvez, faites une expérience avec un lien WiFi et un lien Ethernet filaire.

Sauvez ClientL2 et ServerL2.

Niveau 3: Clerc

Créez ServerL3 et ClientL3, basés sur *L2, qui:

Vous ferez au moins deux scénarios avec des questions dans un ordre différent pour le client.

Sauvez ClientL3 et ServerL3 et les deux scénarios.

Niveau 4: Assistant(e)

Dans le dossier du serveur, vous mettez une image.

Dans ServerL4 et ClientL4, une des questions est "envoie moi l'image X". ServerL4 va chercher dans son dossier l'image X, puis l'envoie au client. ClientL4 affiche l'image reçue.

Sauvez ClientL4 et ServerL4.

Niveau 5: Maître multilingue (à la carte)

L'un des deux cotés est dans un langage autre que Java, par exemple Python, C...

Réécrivez le coté pertinent pour votre projet dans un autre langage

Sauvez ClientL5 et ServerL5.

Niveau 6: Maître Android (à la carte)

L'un des deux cotés est sur un téléphone Android, probablement le client.

Faites vous aider par le binöme Android pour emballer le client dans une AsyncTask.

Sauvez ClientL6 et ServerL6.

Niveau 7: Maître JSON (à la carte)

Dans ServerL7 et ClientL7, une des questions est "voici la question en JSON". ServerL4 répond avec un JSON aussi.

Sauvez ClientL7 et ServerL7.

Niveau 8: Maître HTTP (à la carte)

Dans votre cas, il y a beaucoup de fichiers à échanger, de types très différents.

Utiliser une bibliothèque HTTP pour remplacer les échanges avec Socket.

Une des difficultés est qu'il faut une bibliothèque pour le serveur.

Les options sont: