Communication par datagrammes UDP avec utilisation de threads

Objectifs

Faire communiquer deux ordinateurs en utilisant des datagrammes de type UDP en utilisant des méthodes threads qui seront lancées en tant que daemon (tournant donc en tâche de fond et ne s'arrêttant pas seules). La discussion entre les deux machines prendra fin dès que l'une des machines aura envoyé le mot clef "fin".

Ce TP est largement inspiré de l'excellent site de Madame Irène Sharon (ENST - Paris) dont vous trouverez à la BU le livre intitulé "Le langage Java : concepts et pratique" - Éditions Hermès (ISBN 2-7462-1212-9).

Programmation

Il s'agit décrire trois nouvelles classes :

Globalement, il faut reprendre ce que nous avons programmé sur les échanges de datagrammes à l'intérieur des méthodes run() des threads. La difficulté majeure consiste à synchroniser proprement les threads et la classe principale à l'aide de la méthode synchronized et notify().

Indication sur la synchronisation :

Lorsqu'une méthode d'instance déclarée synchronized est invoquée, elle pose un verrou sur l'instance concernée. Précisément, si une autre thread invoque une méthode elle aussi synchronized , elle attendra jusqu'à ce que le verrou soit relâché. Le verrou sera relâché si :


On peut aussi utiliser l'instruction synchronized pour mettre un verrou sur un objet, obj par exemple, pour mettre un verrou sur obj le temps qu'un bloc d'instructions s'exécute. On utilise alors la syntaxe : synchronized(obj) { instruction1; instruction2; ... } Toute méthode synchronized invoquée sur obj ou tout bloc intérieur à une instruction synchronized portant sur obj devra alors attendre que le verrou soit supprimé.

Attention aux forts riques de "plantage" liés à la mauvaise utilisation des daemons et des instructions de synchronisation.