Le but de ce TP est de concevoir une implémentation des protocoles ABCAST et CBCAST.
Il possède les caractéristiques suivantes :
Cette implémentation utilise trois threads, un "envoyeur de bas niveau" (LowSender), un "recepteur de bas niveau" (LowReceiver) et un "recepteur de haut niveau" (HighReceiver).
Cet exercice a été entièrement réalisé par Glenn ROLLAND <glenux@fr.st> à l'occasion de travaux pratiques du cours de Programmation Répartie du Master 2 Ingénierie Informatique - Systèmes, Réseaux et Internet.
J'ai choisi d'écrire un protocole unique Multi-BroadCast Protocol (MBCP) utilisable aussi bien pour envoyer les datagrammes d'ABCAST que de CBCAST.
+------+-----------+---------+
| Type | Timestamp | Message |
+------+-----------+---------+
Dans ce datagrame:
Type est de type unsigned char et peu prendre les valeurs suivantes:
Timestamp peut varier en fonction de Type.
+------------+-------------+
| Site index | Clock value |
+------------+-------------+
+------------+------------+-------------+
| Site_index | Clock_size | Clock_value |
+------------+------------+-------------+
Site_index
est de type unsigned short
(16 bits).
Il indique l'index du site emetteur. La numérotation des
index débute à zéro.
Clock_size
est de type unsigned short
(16 bits).
Ce champ indique la taille de l'horloge (si celle-ci est vectorielle).
Clock_value peut varier en fonction de Type.
Message possède la structure suivante:
+--------------+--------------+
| Message_size | Message_data |
+--------------+--------------+
Message_size est de type unsigned short (16 bits). Cette valeur indique la taille du message.
Message_data est un tableau de valeurs char (8 bits * Message_size). Ce champ contient le message (qui peut être une estampille).
Cet exercice nécessite:
Vous pouvez télécharger la dernière archive des sources, ou bien directement leur version la plus récente sur le dépôt Subversion du projet.
Elle est disponible à l'adresse :
http://glenux2.free.fr/pub/projets/ProgRepartie/TP2/Archives/
Afin d'obtenir les sources les plus à jour, vous pouvez utiliser le logiciel de contrôle de sources Subversion
$ svn
checkout \
https://websvn.glenux.ath.cx/svn/Cours/M2/Programmation_Repartie/TP2/
\
prog-repartie-tp2
Il n'y a pas de mot de passe, il suffit donc de presser la touche "Entrée" pour l'utilisateur "anonymous", si ce dernier vous est demandé.
Si vous avez choisi l'archive, commencez par la décompressez.
$ tar -xzvf prog-repartie-tp2.tar.gz
Rendez vous ensuite dans le dossier qui vient d'être créé lors de la décompression.
$ cd prog-repartie-tp2
Puis lancez la compilation du logiciel:
$ ./autogen.sh
$ ./configure
$ make
On supposera que les machines weber, beethoven et mozart font partie du même groupe, que leur ports respectifs pour la reception sont 2300, 2330, et 2360.
Pour la machine weber, on lancera:
$ ./dabcast -A -p 2300 -g weber:2300 -g beethoven:2330 -g mozart:2360 -i 1
Pour la machine beethoven:
$ ./dabcast -A -p 2330 -g weber:2300 -g beethoven:2330 -g mozart:2360 -i 2
Pour la machine mozart:
$ ./dabcast -A -p 2360 -g weber:2300 -g beethoven:2330 -g mozart:2360 -i 3
On supposera que les machines weber, beethoven et mozart font partie du même groupe, que leur ports respectifs pour la reception sont 2300, 2330, et 2360.
Pour la machine weber, on lancera:
$ ./dabcast -C -p 2300 -g weber:2300 -g beethoven:2330 -g mozart:2360 -i 1
Pour la machine beethoven:
$ ./dabcast -C -p 2330 -g weber:2300 -g beethoven:2330 -g mozart:2360 -i 2
Pour la machine mozart:
$ ./dabcast -C -p 2360 -g weber:2300 -g beethoven:2330 -g mozart:2360 -i 3