Accueil
Professeurs et Démonstrateurs
Horaires et locaux
Notes de cours
Démonstrations et devoirs
Examens
Liens utiles
Au sujet du livre de cours
Consultez vos notes
Foire aux questions (FAQ)
Sessions antérieures (A01, H02)
|
|
IFT3820/IFT6833 ; Démonstration #8
Buts:
- Exercice -1- (Solution)
Ecrire un programme qui ouvre :
- 1. une socket de la famille UNIX, de type SOCK STREAM avec le protocole TCP.
- 2. une socket de la famille UNIX, de type SOCK DGRAM avec le protocole UDP.
- 3. une socket de la famille UNIX, de type SOCK DGRAM avec le protocole par d´efaut (désigné par 0).
- 4. une socket de la famille UNIX, de type SOCK STREAM avec le protocole par d´efaut (désigné par 0).
- 5. une socket de la famille INTERNET, de type SOCK DGRAM avec le protocole UDP.
- 6. une socket de la famille INTERNET, de type SOCK STREAM avec le protocole TCP.
- 7. une socket de la famille INTERNET, de type SOCK DGRAM avec le protocole TCP.
- 8. une socket de la famille INTERNET, de type SOCK STREAM avec le protocole UDP.
- 9. et une dernière de la famille INTERNET, de type SOCK RAW avec le protocole IP.
Est-ce que ces ouvertures ont effectivement eu lieu? Lesquelles? Lorsqu'une
ouverture échoue, comment pourrait-on en connaître la raison (protocoles non
disponibles, droits d'accès etc.)?
- Exercice -2- (Solution Q1) (Solution Q2)
- 1. Ecrire un programme qui ouvre une socket UNIX quelconque. Avant, pendant
et après l'exécution de ce programme, lancer la commande (sous Red Hat Linux
release 7.1 (Seawolf)) netstat -a -x (ou netstat -a -p -A unix). Pouvez-vous
situer la socket que vous avez ouverte?
- 2. Ecrire un nouveau programme qui ouvre une socket
INTERNET quelconque. Avant, pendant et après l'exécution de ce programme,
lancer la commande netstat -a -p -A inet. Pouvez-vous situer la socket que vous
avez ouverte ?
- Exercice -3- (Solution)
Ecrire un programme qui crée une socket UNIX quelconque et lie
cette socket à un port donné avec la primitive bind.
Mêmes questions qu'auparavant : lancer avant, pendant et après l'exécution
du programme, les commandes netstat -a -p -A unix et aussi la commande ls.
(Il y aura un positionnement des bits SET_UID et SET_GID et il se peut que
vous ne puissiez pas positionner ces bits pour des raisons de privilèges, à
vérifier!)
- Exercice -4- (Solution)
Donner l'adresse IP de la machine www2.iro.umontreal.ca ainsi que le nom et
l'adresse IP du serveur de nom. Donner aussi l'adresse IP de la machine
www.lemonde.fr du journal français Le Monde.
- Exercice -5- (Solution)
- 1. Ecrire un programme qui, étant donné un numéro de port nb port passé en
argument, crée une socket INTERNET quelconque (à vous de choisir le type) et la
lie au port numéro nb port de la machine locale.
- 2. Mêmes questions habituelles : En lançant les commandes ls et netstat -a
-A inet avant, pendant et après l'exécution, vérifier si ces commandes ont pris
votre socket en compte.
- 3. Essayez divers numéros de port. Est-ce que le numéro de port indiqué
correspond effectivement au numéro de port que vous avez spécifié ?
- 4. Que se passe-t-il lorsque vous spécifiez un numéro de port déjà utilisé
par ailleurs ?
- 5. Que se passe-t-il lorsque le port demandé est le port 0 ? Est-ce que la
socket a été attachée ? Est-ce que le numéro de port est 0 ?
- Exercice -6- (Solution)
- 1. Réaliser le programme d'un serveur TCP qui prend en argument un numéro
de port. Ce serveur crée une socket et l'attache à ce numéro de port. Ensuite,
il doit commencer par écouter le réseau en attente des demandes de connexions,
et accepter jusqu'à deux connexions avant de fermer la socket. Pour chaque
connexion acceptée, il doit afficher l'adresse du client et le descripteur de
la nouvelle socket de service. Après avoir accepté deux connexions, il doit
attendre la frappe d'une touche pour fermer toutes les sockets.
- 2. Réaliser le programme d'un client TCP qui prend en argument l'adresse
(adresse IP + numéro de port) d'un serveur TCP. Ce client doit créer une socket
et l'attacher à un port libre, et afficher le numéro de ce port
libre. Ensuite, il doit essayer de se connecter au serveur et l'afficher
lorsqu'il a réussi. Enfin, il doit attendre la frappe d'une touche pour fermer
sa socket.
- 3. Identifier ces connexions avec la commande netstat -a -p -A inet alors que la
connexion est toujours ouverte.
- 4. Que se passe-t-il lorsque que le processus client ou serveur se termine
sans que la socket ait été fermée ? Est-ce que la socket subsiste ou non ?
- 5. Est-ce que la connexion est bloquante ou non ? Autrement dit, que se
passe-t-il dans le processus client lorsqu'une connexion a été demandée et que
de l'autre côté, pour une raison quelconque, le serveur n'accepte pas la
connexion immédiatement ?
- 6. Est-ce que l'acceptation est bloquante ? Autrement dit, que se
passe-t-il dans le processus serveur lorsque la primitive accept a été appelée
et qu'aucune connexion n'a été demandée?
|
[top] |