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 codageLe 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(); }