:: Enseignements :: Master :: Master TTT :: 2008-2009 :: Programmation Réseaux en Java ::
![[LOGO]](http://igm.univ-mlv.fr/ens/resources/mlv.png) | Examen -- Master 2 TTT -- Programmation des réseaux avec Java -- Tronc Commun |
23 Mars 2009
Remarques importantes :
Aucun document n'est autorisé.
Les questions et l'exercice sont indépendants et peuvent être
réalisés dans n'importe quel ordre.
Prenez le temps de bien lire les questions avant de répondre !
Questions de cours
Vous pouvez si besoin faire des schémas pour expliquer vos réponses.
Question 1
Que représente la classe
InetAdress ?
Expliquez ce qui se passe lorsque le code suivant est exécuté :
import java.net.InetAddress;
public class Question1 {
public static void main(String[] args) {
InetAddress ia = InetAddress.getByName("la.machine.fr");
}
}
Question 2
Expliquez en quelques mots ce qu'est un "jeu de caractères" (ou charset en anglais),
et à quoi correspondent les opérations d'encodage et de décodage que peuvent prendre
en charge certains flots en Java.
Pourquoi ces notions sont elles particulièrement importantes dans le contexte des
applications réseaux ?
Question 3
Citez cinq différences importantes entre TCP et UDP.
Question 4
Expliquez comment fonctionne une communication UDP du point de vue d'un client
puis donnez les classes java représentant les entités mises en jeu.
Question 5
Expliquez comment fonctionne une communication UDP du point de vue d'un
serveur puis donnez les classes java représentant les entités mises en jeu.
Question 6
Expliquez comment fonctionne une communication TCP du point de vue d'un client
puis donnez les classes java représentant les entités mises en jeu.
Question 7
Expliquez comment fonctionne une communication TCP du point de vue d'un
serveur puis donnez les classes java représentant les entités mises en jeu.
Exercice
Le but de cet exercice est d'écrire un serveur qui compte le nombre de
lignes de texte reçues de ses clients. Ce serveur se démarre par la
commande :
java LineCounterServer max tcpPort groupAddress groupPort
- Il se place alors en attente d'acceptation de clients sur le port tcpPort
de la machine locale.
- Pour chaque client accepté, il lit le flot de
données reçues de ce client en considérant qu'il s'agit de texte
encodé en ASCII.
- À chaque ligne reçue d'un client, il incrémente un
compteur (qui est le même pour tous les clients connectés).
- Lorsque le
compteur atteint la valeur max, il envoie la chaîne de caractères "Max
lines received" en multicast au groupe défini par l'adresse
groupAddress et le numéro de port groupPort, puis réinitialise le
compteur à zéro.
Il est important que la gestion des clients par le
serveur soit concurrente, et on pourra utiliser une nouvelle thread
pour chaque nouveau client accepté.
Écrire la classe
LineCounterServer du serveur,
- avec un constructeur qui
initialise ce serveur et crée les sockets utiles,
- une méthode launch qui
démarre le serveur (le met en attente de clients),
- une méthode main qui
crée un objet serveur à partir des arguments sur la ligne de commande et le
démarre,
- plus toute autre méthode que vous jugerez utile. Vous porterez une
attention particulière à la gestion concurrente des clients et du compteur,
ainsi qu'à la gestion des exceptions et la fermeture des connexions.
Conseil : commencez par réfléchir aux méthodes dont vous avez besoin et à ce qu'elles doivent faire...
© Université de Marne-la-Vallée