Architecture et programmation des réseaux avec Java

TD 8

Réseau et nouvelles entrées-sortie :java.nio


Exercice 1 - Conversion de codage de caractères et nio

Écrire un serveur et un client UDP réalisant un service de conversion du codage de chaînes de caractères en utilisant un DatagramChannel. Le client envoie un paquet UDP dont le format est le suivant :

codage des caractères d'entrée (en ASCII 7bits)
codage des caractères de sortie (en ASCII 7bits)
message codé avec le premier codage
    
Le serveur envoie en réponse le message codé avec le second codage spécifié. En cas d'erreur, le serveur renvoie un datagramme vide. Les retours chariot sont des \n.


Exercice 2 - Téléchargement de fichiers à connexions multiples

Écrire un client se connectant au proxy (hôte: proxy.univ-mlv.fr, port 3128), et récupérant une URL avec dix threads se chargeant chacune d'un dixième du fichier. Pour cela, on commencera par envoyer une requête HEAD afin de connaître la taille (si le serveur n'indique pas la taille, en renverra une erreur). Ensuite, chaque thread lancera un requête GET partielle ("range: bytes=debut-fin", les bornes sont inclues et le premier octet est à l'indice 0) pour récupérer sa partie du fichier, qui sera stockée dans un tampon mappé. Pour obtenir la taille du fichier, on utilisera le mécanisme des URLConnection.

Modifier le programme précédent pour qu'il fonctionne avec une seule thread, en utilisant des sélecteurs.


Exercice 3 - Serveur HTTP

Écrire un serveur HTTP dont le codage de caractères des pages HTML renvoyées est aléatoire. On écrira l'en-tête dans un ByteBuffer et le corps du message dans un autre. On enverra le paquet en une seule fois avec un GatheringByteChannel

Pour obtenir un codage de caractères aléatoire, on utilisera le code suivant :

  private static final java.util.Random random = new java.util.Random();

  private static java.nio.charset.Charset randomCharset() {
    java.util.Collection charsets =
      java.nio.charset.Charset.availableCharsets().values();
    int val = random.nextInt(charsets.size());
    java.util.Iterator it = charsets.iterator();
    for(int i=0;i<val;i++)
      it.next();
    return (java.nio.charset.Charset)it.next();
  }


© Université de Marne-La-Vallée - Février 2004