Bienvenue dans cet espace de la matière "Systèmes et Applications Répartis SAR", Travaux Pratiques TPs & Travaux Dirigés TDs.
Enseignants:
Enseignant du Cours: Monsieur Heithem Abbes. CLOSED ! OLD Web Page !
Enseignante du TD/TP: Thouraya Louati.
Année Universitaire: 2014/2015 (Premier Semestre)
Section: IF4A / IF4B (Emplois du temps: IF4A / IF4B)
Ingénieurs en Informatique 4ème année.
Faculté des Sciences de Tunis FST Département des Sciences de l'Informatique
Annonce:
Les séances de Vendredi 27/02 [de 13h45 à 18h15] sont annulées et sont reportées à Mercredi 04/03 (même horaire mais ça sera à la salle C).
Veuillez préparer l'environnement de développement de chez vous. Ceci nécessite internet.
Tous les détails sont disponibles sur cet espace (Tableau 3).
Veuillez publier cette annonce sur le groupe FB
--------------------------------------------------------------------------------------------------------
Projet Java RMI:
Organisez-vous en binômes pour le projet Java RMI (c’est un seul projet pour tous les étudiants). Chaque binôme est censé m’envoyer ses coordonnées avant Mardi 23/12/2014.
Pour ceux qui comptent travailler en monôme, sont censés aussi m’envoyer leurs coordonnées. N.B : Ils resteront en monôme jusqu’à la fin du projet.
NB : Mentionnez vos noms, prénoms, amphi (IF4A ou IF4B) et le groupe de TPs dans l’email (Vous trouvez la liste des groupes de TP sur cette URL).
(Courriel: thouraya.louati@gmail.com)
Veuillez publier cette annonce sur le groupe FB
annonce publiée le 20/12/2014
Vous trouvez sur ce tableau le projet et les listes des binômes / monômes.
Date de publication : Mardi 23 Décembre 2014
Date limite de remise du projet : Mardi 6 Janvier 2015 ( à cette adresse thouraya.louati@gmail.com)
Projet / Liste
Affichage
Téléchargement
Date
Veuillez me signaler en cas de faute sur la liste.
--------------------------------------------------------------------------------------------------------
Vous trouvez les TPs de Java RMI (séance du Semaine 08/12) sur le tableau 11 au bas de la page. (Installation du JDK, série RMI, Codes : Reverse, ReverseVersion2, RegistryViewer.java etc..)
Vous trouvez la correction de l'exercice 1 ONC RPC (addition de deux entiers) (séance de TP Semaine 01/12) sur le tableau 10 au bas de la page.
Bonne Chance :)
-----------------------------------------------------------------------------------------------
Projets SAR - Les sockets :
Organisez-vous en binômes pour les projets SAR. Chaque binôme est censé m’envoyer ses coordonnées avant Dimanche 16/11/2014.
Pour ceux qui comptent travailler en monôme, sont censés aussi m’envoyer leurs coordonnées.
NB : Mentionnez vos noms, prénoms, amphi (IF4A ou IF4B) et le groupe de TPs dans l’email (Vous trouvez la liste des groupes de TP sur cette URL).
(Courriel: thouraya.louati@gmail.com)
Vous trouvez sur ce tableau les différents projets et la liste d’affectation Projet- Étudiant.
L’affectation est aléatoire.
Consultez les listes des affectations (Liste 1...Liste 10). À chaque monôme/ binôme, on a affecté un projet.
Date de publication : 16/11/2014
Date limite de remise du projet : 3 Décembre 2014 ( à cette adresse thouraya.louati@gmail.com)
Projets
Affichage
Téléchargement
Veuillez me signaler en cas de faute sur la liste.
--------------------------------------------------------------------------------------------------------
1- Vous trouvez les documents qui concernent la correction de l’exercice 1 partie 1 sur le tableau 5.
2- Vous trouvez les documents de la correction de l’exercice 1.2 (ClientEchoTCP.c et ServeurEchoTCP.c) sur le tableau 7. Vous trouvez aussi les différents tests à faire pour la séance de TP.
3- Vous trouvez les documents de la correction de l’exercice 2 (partie 1 et partie 2) (InverserClientUDP.c et InverserServeurUDP.c) sur le tableau 6.
4- Vous trouvez les documents qui concernent la correction de l’exercice 2 partie 3 (InverserClientTCP.c et InverserServeurTCP.c) sur le tableau 8.
5- Vous trouvez l'Exercice 3 + Socket UDP en Java + TP Semaine 17/11 (les commandes ss et netstat) sur le tableau 9
Groupes TP IF4 (Les listes)
Changement de la salle des TPs pour les groupes IF4 de Vendredi et Samedi.
Salle D --> Salle B qui est, aussi, au premier étage du bâtiment près de la buvette des étudiants. (Micro 4)
Description:
Horaire
Semaines des TDs Semaines des TPs
Séances 1/2/3/4 TD: (déjà faites) Séances 1/2/3/4/5 TP: (déjà faites)
- IF4B: Vendredi 10/10|31/10/2014|14/11|28/11 - IF4B:
- G2: 08h00 à 09h30 à la salle l112 - Lundi 13/10/|10/11|17/11|1/12|8/12 G2: 08h00 à 09h30 @
Micro 1
- G1: 11h30 à 13h00 à la salle l111 - Vendredi 17/10|07/11|21/11|5/12|12/12G3: 08h à 09h30 à la
salle B (Micro 4)
- Vendredi 17/10|07/11|21/11|5/12|12/12 G1:11h30 à 13h à la
salle B (Micro4)
- IF4A: Samedi 11/10/|01/11/2014|Mardi 18/11|29/11 - IF4A:
- G2: 08h00 à 09h30 à la salle l111 - Lundi 13/10|10/11|17/11|1/12|8/12 G3: 09h45 à 11h15 @
Micro 1
- G1: 09h45 à 11h15 à la salle l109 - Samedi 18/10|08/11|22/11|6/12|13/12 G1: 08h à 09h30 à la
salle B (Micro 4)
- Samedi 18/10|08/11|22/11|6/12|13/12G2:09h45 à 11h15 à la
salle B (Micro4)
NB : Micro1 est au département de Mathématiques ( à
l'entrée de la Faculté).
Salle B (Micro 4) est au premier étage du bâtiment
près de la buvette des étudiants.
Description du cours
Ce cours est composé de deux parties:
- Partie théorique: Connaître les systèmes distribués et les paradigmes utilisés lors de leur conception/
développement: échange de messages (par sockets), appels de procédures distants
(ONC RPC, Java RMI).
(Les pdfs du cours sont disponibles sur cette URL)
- Partie pratique: Pré-requis: Du point de vue pratique, ce cours suppose que l'étudiant maîtrise les langages de
programmation C et Java et l'environnement Linux (voir au bas de cette page quelques
liens de rappel).
Cours: Documents:
1
Type
Nom
Partie1: Introduction aux systèmes répartis
Partie2: Les sockets
Partie3: Les appels de procédure distants
Lien
Partie4: Open Network Computing Remote Procedure Call (ONC RPC)
Partie 5: JAVA RMI
Les fichiers sources .java de l'exemple vu en cours de l'inversement de chaine de caractères.
Le fichier ReadMe.txt donne les commandes nécessaires pour compiler et lancer les programmes client et serveur.
Le même exemple Reverse avec une exportation explicite de l'objet distant et avec un gestionnaire de sécurité pour le serveur d'objets et le client
Volume Horaire Cours: 1h30 par semaine.
TDs & TPs: Documents:
2
Type
Nom
Description du cours
Série 1: Sockets
Taille
64 ko
79 Ko
Affichage
Téléchargement
Date
Pour ceux qui comptent installer Cygwin sous Windows:
3
Type
Nom
Taille
98 ko
78 Ko
89 ko
68 ko
75 ko
69 ko
89 ko
71 ko
71 ko
54 ko
80 ko
110 ko
Affichage
Téléchargement
Date
Pour ceux qui comptent utiliser les technologies de virtualisation sous Windows:
4
Type
Nom
Installation d' Oracle VM VirtualBox
Installation d'une machine virtuelle (Ubuntu) dans VirtualBox
Taille
168 ko
Affichage
Téléchargement
Date
Manuel du programmeur
L'accès aux pages man se fait avec la commande man. Procédez comme suit:
Manuel en Anglais:
louati1@louati1-VirtualBox:~$ man socket
louati1@louati1-VirtualBox:~$ man bind
louati1@louati1-VirtualBox:~$ man connect
louati1@louati1-VirtualBox:~$ man listen
louati1@louati1-VirtualBox:~$ man accept
louati1@louati1-VirtualBox:~$ man send (ou bien $man sendto)
louati1@louati1-VirtualBox:~$ man recv (ou bien $man recvfrom)
louati1@louati1-VirtualBox:~$ man close
Autres détails sont regroupés dans le chapitre 7:
Manuel en Français:
- socket(7) : Interface de programmation des sockets. louati1@louati1-VirtualBox:~$ man 7 socket
- udp(7) : Protocole UDP pour IPv4 louati1@louati1-VirtualBox:~$ man 7 udp
- tcp(7) : Protocole TCP louati1@louati1-VirtualBox:~$ man 7 tcp
Volume Horaire (TD/TP): 1h30 par semaine.
Exercice 1 (Partie 1): UDP "RFC768 " (Source: http://tools.ietf.org/)
5
Type
Nom
Le programme suivant affiche les paramètres qui lui sont passés depuis le Terminal.
Taille
1 ko
174 ko
6 ko
5ko
955 ko
1199ko
Affichage
Téléchargement
Date
prog.c
Figure Client - Serveur (sur le navigateur)
Le code source du Client
Le code source du Serveur
ClientEcho.c
ServeurEcho.c
-> retourne la liste des ports réservés
La liste est, aussi, sur iana.org
hostname
IBM@IBM-PC ~/test/TP-1-1
$ hostname (retourne le nom de la machine)
IBM-PC
IBM@IBM-PC ~/test/TP-1-1
$ ./ClientEcho 192.168.1.2 5000 Bonjour IF4
Socket creee avec succes! (3)
Message: Bonjour IF4 envoye avec succes (11 octets)
//Le nom de la machine au lieu de l'adresse IP
IBM@IBM-PC ~/test/TP-1-1
$ ./ClientEcho IBM-PC 5000 Bonjour IF4
Socket creee avec succes! (3)
Message: Bonjour IF4 envoye avec succes (11 octets)
Exercice 2 (Partie 1 et 2): UDP "RFC768 " (Source: http://tools.ietf.org/)
6
Type
Nom
Le code source du Client: InverserClientUDP.c
Le code source du Serveur: InverserServeurUDP.c
Documentation
Taille
7 Ko
6 ko
1058 ko
Affichage
Téléchargement
Date
InverserClientUDP.c
InverserServeurUDP.c
Exercice 1 (Partie 2): TCP "RFC793 " (Source: http://tools.ietf.org/)
7
Type
Nom
Taille
6 ko
7 ko
1334 ko
18 ko
7 ko
108 ko
Affichage
Téléchargement
Date
Le code source du Client: ClientEchoTCP.c
Le code source du Serveur: ServeurEchoTCP.c
Modification: J’ai ajouté la boucle d’attente de connexion: while(1){socketDialogue = accept……………}
Documentation
ClientEchoTCP.c
ServeurEchoTCP.c
Vous trouvez dans cette documentation les détails de la compilation et de l’exécution et le premier test à faire:
Test 1: Test du Client sans le Serveur.
Utilisation de l’outil réseau Netcat.
Test 2 : bind()
bind: Attache une socket à un numéro de port.
Exécutons deux fois le même serveur.
Le deuxième attachement échoue car le port est
déjà attribué.
Bind: Address already in use. (Voir figure ----->)
Test 3: Cas du Client: Le port est affecté par le système
d’exploitation puisqu’on n’a pas utilisé l’appel
système bind().
La marge des ports utilisés par le SE est sur la
figure ------------------------------------->
Test 4: Pour afficher le port affecté par le système
d’exploitation, vous pouvez ajouter cette
instruction au code du serveur :
printf("Le port attache a la socket du Client est
%d \n", ClientAddr.sin_port);
Test 5: gethostbyname
Figure Client Telnet - Serveur Web (voir figure ->)
Vous allez voir comment un serveur web répond à
la demande d’un client en utilisant Telnet. Il lui
envoie la page index.html. (Vous allez voir
l’adresse IP du serveur)
Remarque : Telnet s’appuie sur TCP.
Exercice 2.3: Reprendre les questions 1 et 2 en assurant
un mode connecté pour écrire
InverserClientTCP.c et
InverserServeurTCP.c.
Travaillez cet exercice pour la séance du TP.
Exercice 2 (partie 3):
8
Type
Nom
Le code source du Client: InverserClientTCP.c
Le code source du Serveur: InverserServeurTCP.c
Taille
6 ko
8 ko
Affichage
Téléchargement
Date
InverserClientTCP.c
InverserServeurTCP.c
Exercice 3 + Socket UDP en Java + TP Semaine 17/11
9
Type
Nom
Le code source du Client: ClientSendFile.c
Le code source du Serveur: ServerRecvFile.c
Fichier de test: MyFile.txt
Rappel fopen - fgets - fputs
Le code source du Client: ClientUDP.java
+ Quelques explications
Taille
6 ko
7 ko
1 ko
72 ko
Affichage
Téléchargement
Date
ClientSendFile.c
ServerRecvFile.c
MyFile.txt
Remarque:
Pour installer OpenJDK7, exécutez la commande suivante dans un terminal :
• sudo apt-get install openjdk-7-jdk
Sous Cygwin: Voici le lien du tuto: lien
ClientUDP.java
Le code source du Serveur: ServeurUDP.java
+ Quelques explications
Commandes utiles:
ss -s --> Des statistiques sur les sockets établies
ss -t -a --> Toutes les sockets TCP
ss -u -a --> Toutes les sockets UDP
ss -l --> Toutes les sockets à l'écoute
Vérifiez à l'aide de la commande:
netstat -apn > nets.txt
gedit nets.txt
que le serveur TCP écoute sur le numéro de port correct
Procédez comme suit: Lancez 3 terminaux (1: serveur, 2: pour le client, 3: pour la commande netstat) puis cherchez votre socket (à l'aide du numéro de port) dans le fichier nets.txt
1- Création d'un réseau local: (Ubuntu 12)
à l'aide d'un câble réseau ethernet RJ45 (croisé)
Configuration:
voir figure 1 ---------------------->
et figure 2 ---------------------->
2- Réseau local entre deux VMs (mode Bridge Tuto)
3- Réseau local (routeur wifi)
4- Réseau wifi ad-hoc
ServeurUDP.java
Remarque: Pour savoir votre version d’Ubuntu, tapez la commande suivante:
lsb_release –d
ou
cat /etc/lsb-release
10 ONC RPC Open Network Computing Remote Procedure Call "RFC1831 " et "RFC5531" (Source: http://tools.ietf.org/)
Type
Nom
Paquets à installer: (Ceci nécessite internet)
1) rpcgen:
- Sous Linux (VirtualBox ou DualBoot): le paquet
existe par défaut.
- Pour les utilisateurs de Cygwin, il faut
sélectionner le paquet rpcgen (Voir tutoriel)
2) portmapper
sudo apt-get install portmap
3) Tapez la commande make sur un terminal, si elle
n'est pas reconnue, installez le paquet make:
sudo apt-get install make
Exercice1:
Une procédure distante qui fait l’addition de deux entiers. Ce programme prend en paramètre deux entiers de la ligne de commande (sous forme de chaînes de caractères ), les convertit en deux entiers, appelle la procédure distante pour faire l'addition et affiche le résultat.
Étape 1:
Création de l’interface
Téléchargez l'interface add.x ---------------->
Compilation de l'interface: (à voir les fichiers générés)
Taille
1 ko
Affichage
Téléchargement
Date
rpcgen add.x --voir figure------->
Le manuel de rpcgen est sur cette URL.
Étape 2:
Générez une version minimale du code client et du code serveur comme suit:
rpcgen -a add.x -------voir figure------>
Vous aurez, de plus, les fichiers suivants:
add_client.c add_server.c Makefile.add
Compilez les différents codes comme suit:
1- Choisissez le compilateur gcc (au lieu de cc) comme suit:
Ajoutez l'instruction CC=gcc au fichier Makefile.add
------- voir figure --->
2- Compilation: make -f Makefile.add
--------voir figure --------------->
Étape 3: Premier test pour le client et pour le
serveur
1- Au lieu de taper, à chaque fois: make -f Makefile.add
pour la compilation, on va procéder à la compilation
directement en utilisant la commande make
On renomme le fichier Makefile.add comme suit:
mv Makefile.add makefile
2- Configuration au niveau du nouveau fichier
makefile: (Ajoutez les détails en rouge)
# Compiler flags
CC=gcc
CFLAGS += -g -DRPC_SVC_FG
LDLIBS += -lnsl
RPCGENFLAGS = -C
Explication:
-C: code C conforme à ANSI C
-DRPC_SVC_FG: Le serveur tourne en premier
plan
3- Ajoutez une instruction d'affichage au code source
du serveur comme suit: -----voir figure ----------->
4- Compilation en utilisant la commande "make"
------- voir figure ------------>
5- Dans un premier terminal, récupérez le nom du
serveur(commande "hostname") ou l'adresse ip
(commande "ifconfig")
Lancez le serveur comme suit: -------------------->
Dans un deuxième terminal, lancez le client comme
suit:
-------------avec hostname (serveur) -------->
OU
------------avec l'adresse ip du serveur ---->
Comme résultat, vous aurez l'affichage suivant sur le terminal serveur ---------------------------------->
Jusqu’à cette étape, le client a fait l’appel à une procédure du serveur. Cette procédure fait juste un affichage. On va agir sur le code source du serveur pour qu’il fasse l’addition de deux entiers.
Étape 4: Addition de deux entiers
1) Éditez le code du client et ajoutez les instructions
en rouge -----------voir figure ---->
2) Éditez le code du serveur et ajoutez les instructions
en rouge ---------- voir figure ----->
3) Compilez en utilisant la commande make ---------- voir figure ----->
4) Dans un premier terminal, récupérez le nom du
serveur(commande "hostname") ou l'adresse ip
(commande "ifconfig")
Lancez le serveur comme suit: sudo ./add_server
5) Dans un deuxième terminal, lancez le client (qui
demande l'addition des deux entiers "2" et "7" comme
suit: ./add_client 127.0.0.1 2 7
6) Résultats:
Sur le terminal du serveur, vous aurez ----figure-->
Sur le terminal du client, vous aurez ----figure---->
Pour ceux qui n’ont pas pu faire tourner l’exercice ONC RPC d’addition de deux entiers sur leurs machines, veuillez procéder comme suit :
1- Je suppose que vous avez déjà installé le portmap
(Ceux qui ont trouvé des problèmes avec ce paquet,
ils peuvent installer le rpcbind comme suit : sudo
apt-get install rpcbind)
2- Téléchargez le paquet ONCRPC-Exercice1-Essai1.rar
(sur lequel j'ai travaillé) (lien de téléchargement) et
décompressez-le.
3- Compilez avec make
4- Lancez le serveur dans un premier terminal :
sudo ./add_server
5- Lancez le client dans un deuxième terminal :
./add_client 127.0.0.1 2 7
11 Java RMI (Remote Method Invocation)
Type
Nom
Installez le JDK:
Pour installer OpenJDK7 (par exemple), exécutez la commande suivante dans un terminal :
• sudo apt-get install openjdk-7-jdk (Remarque: ceci
nécessite Internet)
Sous Cygwin: Voici le lien du tuto: lien
Reverse1:
Les fichiers sources .java de l'exemple vu en cours del'inversion d'une chaine de caractères.
Remarque: évitez les accents dans les fichiers ReverseServer.java et ReverseClient.java
Le fichier ReadMe.txt donne les commandes nécessaires pour compiler et lancer les programmes client et serveur.
Reverse 1: TerminalServeur et TerminalClient
Lancer dans un nouveau terminal la classe
RegistryViewer.java (en parallèle avec le serveur
d'objets et l'annuaire remiregistry) pour voir les noms
des objets dans rmiregistry. ------------------>
Compilation: javac RegistryViewer.java
Exécution: java RegistryViewer localhost 1099
Taille
Affichage
Téléchargement
Date
Remarque: 1099 est le port par défaut sur lequel est lancé rmiregistry
ReverseVersion 2:
Le même exemple Reverse avec une exportation explicite de l'objet distant et avec un gestionnaire de sécurité pour le serveur d'objets et le client.
Remarque: évitez les accents dans les fichiers ReverseServer.java et ReverseClient.java
Renommez : Le répertoire serveur --> server
Le fichier java.policy (dans le répertoire
server) ---> server.policy
Le fichier ReadMe.txt donne les commandes nécessaires pour compiler et lancer les programmes client et serveur.
ReverseVersion 2: TerminalServeur et TerminalClient
Divers:
Policy file: voici un exemple de directive:
grant {
permission java.io.FilePermission "out.txt","write";
};
Permissions in the Java Development Kit (JDK): lien
Série RMI ------------->
Liens utiles:
Rappel sur les commandes Linux:
Rappel sur la programmation en Langage C:
Rappel sur la programmation en JAVA:
Forums aux questions:
Linux: http://stackoverflow.com/questions/tagged/linux http://www.unix.com/
Langage C: http://stackoverflow.com/questions/tagged/c
-> Lisez ce guide avant de poser vos questions sur le forum stackoverflow (Respectez toutes les consignes)
Bibliographie:
Book: Distributed Systems: Concepts and Design (5th Edition), George Coulouris, Jean Dollimore, Tim Kindberg,Gordon Blair. 2011.
A lot of success in life is that passion and persistence, of really staying the course, staying working on it, and, not letting go. Not giving up.