TP Noté 2012

Dans ce sujet, nous vous demandons, dans des exercices indépendants, de réaliser différents clients et serveurs basés sur les travaux pratiques précédents.

Commencez par créer un nouveau projet dans votre environnement Eclipse que vous appellez tpnote-VotreNom. Créez aussi un fichier readme.txt dans lequel vous mettez vos notes à destination des correcteurs.

Le barème est donné à titre d'indication.

Les exercices sont progressifs et il est donc recommandé de les réaliser dans l'ordre. Les exercices sont assortis de questions de compréhension auxquelles vous devez répondre par écrit en mettant des commentaires dans le code ou en complétant le fichier readme.txt.

En fin de TP :

  1. si ce n'est déjà fait, créez un fichier readme.txt dans lequel vous mettez vos notes à destination des correcteurs ;
  2. exportez votre projet Eclipse sous la forme d'une archive :
  3. télé-chargez le fichier sur moodle afin de fournir le résultat de votre travail ;
  4. vérifiez avec l'enseignant présent dans la salle que le fichier téléchargé est correct.

Ce TP est réalisé en plusieurs étapes. Pour chacune, créez un paquetage portant le nom de l'étape.

1. Copie d'une partie de fichier (3 pts)

Pour cette étape, créez dans le paquetage partialcopy un programme qui utilise un ByteBuffer.

Écrivez un programme qui reçoit en arguments :

  1. le nom d'un fichier,
  2. un entier qui décrit le rang du premier octet à copier dans le fichier,
  3. et un entier qui décrit le nombre d'octets à copier.

Ce programme copie les données correspondant aux arguments dans un fichier appelé res.out.

Voici un exemple d'appel du programme :

java PartialCopy /etc/passwd 100 300

Expliquez les choix suivant relatifs aux ByteBuffer :

2. Transfert d'un fichier via UDP (6 pts)

Pour cette étape, créez le paquetage tftp qui contiendra le client et le serveur.

2.1 Envoi d'un fichier via UDP (3 pts)

Dans cette étape, vous transmettez un fichier en envoyant des datagrammes.

Les datagrammes peuvent se perdre et leur ordre de réception peut être différent de leur ordre d'émission. Par conséquent, chaque datagramme doit contenir une entête avec :

  1. le nom du fichier,
  2. un entier long qui décrit le rang du premier octet dans le fichier,
  3. et un entier qui décrit le nombre d'octets du fichier contenus dans ce datagramme.

Considérez que le serveur reçoit des datagrammes sur le port 2020 plus votre numéro de machine. Écrivez le code du client. Si vous voulez tester le code du client vous pouvez utiliser le serveur réalisé en TP pour la réception de plusieurs datagrammes : MainNioRecvN.java.

Expliquez les opérations relatives aux ByteBuffer :

2.2 Réception d'un fichier via UDP (3 pts)

Dans cette étape, vous reconstituez un fichier à la réception de datagrammes.

Les datagrammes tels que décrits précédemment sont reçus par votre serveur.

Votre serveur reçoit des datagrammes sur le port 2020 plus votre numéro de machine. Il copie les octets reçus dans un fichier appelé comme le fichier initial mais avec le suffixe « .copy ».

Écrivez le code du serveur.

Répondez à la question suivante :

3. TFTP robuste (8 pts)

Réalisez dans un paquetage appelé robusttftp une version du protocole précédent en ajoutant des acquittements. Pour cela, nous utilisons au moins trois types de messages :

  1. le message de type 1 contient le nom du fichier et la taille du fichier. Il est utilisé pour débuter un envoi de fichier ;
  2. le message de type 2 est identique au message utilisé dans les étapes précédentes et contient le nom du fichier, le rang du premier octet, le nombre d'octets et les octets transférés ;
  3. le message de type 3 sert à acquiter les données reçues par le serveur. Ces messages contiennent le nom du fichier et le rang du dernier octet reçu séquentiellement depuis le début du fichier. Ainsi, les messages du type 3 servent à informer le client de la progression de la réception des données.

3.1 Partie serveur (4 pts)

Réalisez le serveur qui correspond au protocole de cette étape.

En réalisant le serveur, répondez aux questions suivantes :

3.2 Partie client (4 pts)

Réalisez le client qui correspond au protocole de cette étape.

En réalisant ce client, répondez aux questions suivantes :

4. TFTP robuste multiclients (3 pts)

Dans cette étape, le serveur accepte plusieurs transferts simultanés en provenance de plusieurs clients.

Réalisez cette partie dans un paquetage appelé robusttftpmulti.

En réalisant ce serveur, répondez aux questions suivantes :