Previous Contents Next

7   DS réseau du 11 janvier 2002

La durée de ce contrôle est de deux heures, tous les documents sont autorisés (y compris ordinateurs).

Le barème probable est de 5 points pour les questions de cours, de 5 points pour les questions sur X11 et de 5 points pour chaque exercice de codage.

7.1   Questions de cours sur les sockets

Répondez aux questions suivantes (deux lignes de réponse par question suffisent) :
  1. Citez une interface de programmation réseau qui ne soit pas celle des sockets.
  2. Par quoi est définie une socket ?
  3. Donnez la taille en octets d'une adresse générique de socket.
  4. Existe-t-il des structures adresse de socket de taille inférieure à celle de la structure adresse générique de socket ? En existe-t-il de taille supérieure ?
  5. Sachant que addr est une variable de type struct sockaddr_in, quel message le compilateur C va afficher en analysant l'instruction bind(s,&addr,sizeof(addr)); ? Corrigez l'instruction pour qu'elle se compile sans problème.
  6. Un descripteur de socket Internet en mode connecté est équivalent à quelle autre entité système ? Est-ce encore vrai pour une socket Internet en mode non connecté ?
  7. Comment peut-on obtenir un pointeur de fichier à partir d'un descripteur de socket ?
  8. Quel est le détail important concernant l'initialisation du troisième argument de la fonction accept ?
  9. Peut-on utiliser la fonction connect dans un client manipulant des socketis Internet en mode non connecté ?
  10. Que symbolise la peluche que le redon a sorti de son sac en début d'examen ? Un bonus supplémentaire pour ceux qui me donnent son nom.

7.2   Questions sur le protocole X11

Répondez aux questions suivantes :
  1. Donnez une ligne de commande pour afficher un serveur Xnest de la machine choufleur sur le serveur X principal de la machine courge. Attention, vous devez aussi donner la manipulation a effectuer pour autoriser cet affichage.
  2. Donnez les commandes à taper pour afficher un xeyes de la machine concombre sur le serveur Xnest lancé à la question précédente. On considère que le serveur Xnest accepte toute connection de client.
  3. On suppose que votre programme quémandeur de session XDM s'appelle xdmquery. Son premier paramètre est le nom de machine sur laquelle tourne le serveur de session et le second paramètre est le nom complet du serveur X à prendre en charge (nom de la machine et numéro d'écran). Utilisez ce programme pour que la machine rave prenne en charge le serveur X principal de la machine concombre (il s'agit du serveur concombre:0). Sur quelle machine la ligne de commande doit être tapée ?
  4. Utilisez xdmquery pour que rave prenne en charge le serveur Xnest lancé à la première question.
  5. La ligne de commande de la question précédente provoque l'envoi de paquets UDP. Quelles sont les machines qui émettent ces paquets UDP ? Pouvez-vous dire sur quels ports ? Quelles sont les machines qui reçoivent ces paquets ? Pouvez-vous dire sur quels ports ?
  6. La ligne de commande des deux questions précédentes donne lieu à des flux TCP. Expliquez ce que sont ces flux TCP et donnez les caractéristiques des connexions TCP liées aux flux (c'est à dire les adresses des sockets aux deux bouts de la connexion). Attention n'oubliez pas qu'un serveur Xnest est à la fois un serveur X et un client X.

7.3   Extraits de code du tutorat

7.3.1   Code générique

Écrivez une fonction sendPacket qui permet d'envoyer un paquet XDMCP et d'attendre pendant quelques secondes une réponse (la fonction attend la réponse mais ne la lit pas). La fonction prend en paramètres le descripteur de la socket d'envoi, la structure d'adresse de socket du serveur XDM et le tampon XDMCP. La fonction ne relance pas le paquet si aucune réponse n'est reçue mais retourne -1 dans ce cas. Le prototype de cette fonction est imposé :
int sendPacket(int ds,                      /* Socket locale */
               struct sockaddr_in adresse,  /* Socket du serveur */
               XdmcpBufferPtr paquet        /* Contient le paquet XDMCP */
               );

7.3.2   Code spécifique

Écrivez la fonction remplissant une structure XdmcpBuffer avec un paquet XDMCP de type QUERY. Le prototype de cette fonction est imposé :
XdmcpBufferPtr buildQuery(void);
Vous utiliserez obligatoirement la fonction XdmcpWriteARRAYofARRAY8.

Écrivez la fonction affichant une structure ARRAY8 sous forme de chaîne de caractères (fonction pouvant être utilisée pour le décodage des paquets WILLING par exemple). Le prototype de cette fonction est imposé :
void displayString(ARRAY8 array);

Previous Contents Next