Skip to topic | Skip to bottom
Home
Minfo04
Minfo04.SocketsTp2r1.2 - 13 Jan 2005 - 18:28 - OlivierDalletopic end

Start of topic | Skip to actions

Programmation Sockets : TP2 (et 3)

Premiers clients/serveurs

1. Le but de cet exercice est de parvenir à faire communiquer deux processus qui s'executent sur deux machines différentes. Il vous faut pour cela écrire deux programmes en langage C :

  • un programme, appelé 'envoyeur_udp' dont l'unique tâche est d'envoyer la chaîne de caractères "Hello world" au second programme, au travers d'un socket UDP ;
  • un programme, appelé 'receveur_udp' dont l'unique tâche est de se mettre en attente d'un message (une chaîne de caractères) en provenance d'un socket UDP et de l'afficher à l'écran.

Pour tester que vos programmes fonctionnent, ouvrez deux terminaux, l'un sur votre machine et l'autre sur la machine voisine (ssh). Cela fait, lancez d'abord le programme receveur sur l'une des machines, puis le programme émetteur sur l'autre machine. Si tout se passe bien, le programme receveur doit afficher la chaîne ``Hello world'' dès que vous executez le programme emetteur...

Dans un premier temps, vous pourrez vous contenter d'une version de ces programmes où le numéro de port et le nom de l'autre machine sont codés ``en dur'' dans le programme émetteur, à l'aide de macros #define . En d'autres termes, votre programme émetteur ne saura envoyer son message que vers une seule machine, et pas une autre.

Dans un deuxième temps, écrivez une version plus souple du programme émetteur, dans laquelle le nom de la machine sur laquelle s'exécute le programme receveur, ainsi que le numéro de port UDP pouront être reçus en paramètres.

2. Cet exercice a pour but d'améliorer les deux programmes précédents de la facon suivante:

  1. le programme émetteur doit lire des chaînes de caractères au clavier et transmettre chacune d'elles vers le programme receveur. Il s'arrete lorsque la chaîne ``fin'' est lue.
  2. le programme receveur doit se mettre en attente des messages du programme émetteur, et afficher les chaînes de caractères correspondantes à l'écran. Le programme s'arrète dès que la chaîne de caractères ``fin'' est recue.

3. Faites de nouvelles versions des programmes précédents utilisant des sockets TCP au lieu de sockets UDP (attention, il faut dans ce cas établir une connexion avant d'envoyer un message).

4. Le but de ce programme est de construire une petite application client/serveur TCP :

  1. le serveur se met en attente d'un message du client. Ce message (dont le format est à définir) est supposé représenter un nom de fichier présent sur la machine où s'exécute le serveur (il faut que le serveur vérifie que le fichier existe). Si le fichier existe, le serveur transmet en retour le contenu de ce fichier au client.
  2. le client envoie un nom de fichier au serveur puis se met en attente de la reception du contenu du fichier demandé et affiche ce dernier à l'écran. Le client recoit le nom du fichier, le nom de la machine sur laquelle s'exécute le serveur et le numéro du port sur lequel le serveur ``écoute'' en paramètre.

Mini-projet : serveur IRC

NB: la réalisation du mini-projet se poursuivra lors de la dernière séance de TP. Vous devrez le rendre au plus tard le lundi 17 janvier.

L'application que l'on se propose d'écrire est un serveur de conférence multi-utilisateurs, inspiré de la commande talk d'UNIX.

Un utilisateur peut se connecter à n'importe quel moment au serveur, et une fois connecté, il peut se déconnecter quand il le désire, de manière violente éventuellement (en tuant le processus par exemple), ou de manière douce en envoyant une demande de déconnexion.

Le mécanisme de synchronisation qui sera choisi est trivial: simple passage d'un jeton (unique) du serveur vers un seul client. Seul le client qui a le jeton a le droit de "parler", et il conservera le jeton aussi longtemps que bon lui semblera. Quand un client n'a plus besoin du jeton, il le rend au serveur qui passe le jeton au client suivant, et ce infiniment.

Il s'agit tout d'abord de définir un protocole d'application qui sera ensuite directement implanté au dessus des sockets.

Les primitives de services sont de plusieurs types:

  • Ouverture de la connexion : ce service est un service confirmé. Avant de continuer, le processus client doit attendre la confirmation d'acceptation de la part du serveur distant. On pourrait imaginer, par exemple, qu'une vérification est effectuée par le serveur à partir du nom de l'utilisateur (par exemple pour garantir qu'il n'y a pas d'homonymie possible parmi tous les utilisateurs du service, ou encore que ce serveur n'est disponible que pour un groupe d'utilisateurs bien pr\'ecis).
  • Clôture de la connexion : C'est aussi un service confirmé. Ceci garantit que le serveur est bien d'accord pour terminer la conversation. On est sûr qu'aucun message n'est perdu AU NIVEAU APPLICATION (bien se souvenir que de toute facon TCP garantit le transport complet de tous les paquets en attente dans le noyau).
  • Passage du jeton : Deux primitives (une par sens de communication); ces primitives ces primitives ne sont pas confirmées.
  • Transmission des données : Service non confirmé.

1. En vous aidant de ce schéma qui décrit les interactions entre le client et le serveur, mettez au point (sur papier) les détails du protocole:

  • Diagramme des transitions
  • Format des messages

2. Ecrivez une version simple de l'application : un client-un serveur.

3. (à rendre le mardi 18/01, au plus tard à minuit ) Ecrire une version finale, supportant plusieurs clients.

Modalités de remise du mini-projet

Par mail, sous la forme d'une archive .tar.gz de la façon suivante :
  1. [Dans ce qui suit remplacez base par la concaténation des noms du binôme projet (exemple : Dalle-Besson)].
  2. D'abord placez tous les fichiers du projet dans un répertoire de nom base (NB: vous devez fournir un Makefile)
  3. Créez l'archive depuis le répertoire parent : lorqu'on déplie l'archive, on doit obtenir la création d'un répertoire de nom base (vérifiez avant d'envoyer svp !)
  4. Envoyez l'archive par mail à Olivier Dalle :
    • avec sujet = Subject: [M1INFO] Projet reseau de base
    • joindre l'archive en attachement en faisant attention à l'encodage (sous exmh, choisir 'Base64')
-- OlivierDalle - 05 Jan 2005


to top


You are here: Minfo04 > ReseauxEtProgrammationSocket > SocketsTp2

to top

Copyright © 1999-2017 by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding WIKIDeptinfo? Send feedback