Comme présenté succinctement dans le dernier cours et sugéré à la fin du polycopié sur les NIO, voici des "morceaux de bouts de code" Java correspondant à différentes versions d'un serveur TCP (de mise en majuscule) utilisant les nouvelles classes d'entrée-sortie de Java, les NIO.
Bien évidemment, le code n'est pas très propre et ne saurait être utilisé dans un autre but que l'illustration de l'utilisation des canaux sur les sockets TCP et des sélecteurs.
Le thème récurrent est un serveur de mise en majuscules : il accepte de ses clients des octets représentant des chaînes de caractères, et il renvoit les octets correspondant à ces chaînes mises en majuscule. Plusieurs versions sont présentées ci-dessous :
Main
gère à la
fois l'acceptation du client et la réponse à ses requêtes.
Main
s'occupe d'accepter les nouveaux clients, et une fois accepté, un
client donne lieu à la création d'une nouvelle thread spécifique qui
traite ses requêtes. Cette thread meurt et est détruite lorsque la
connexion avec le client s'arrête. Note : une version plus
réaliste pourrait être développée en utilisant les threads
pools disponibles dans java.util.concurrent.
Main
), mais lecture non bloquante sur toutes les
connexions établies avec les clients (dans une seule autre
thread). Cette version est un peu spéciale, car elle utilise le
mécanisme de sélection pour la gestion du service aux clients et
qu'elle requière de la synchronisation pour accéder au sélecteur
depuis une autre thread (celle qui accepte les nouveaux clients).
Main
(du coup, il n'y a plus de problème d'accès au
sélecteur).
Main
, comme précédement, mais en utilisant le mécanisme
d'attachement de l'enregistrement pour récupérer, avec la clé de
sélection, un objet gestionnaires permettant d'effectuer le
traitement adapté lorsqu'un canal est sélectionné.