PROFDINFO.COM

Votre enseignant d'informatique en ligne

Sockets et dll

Les librairies

Faire une librairie en C#, c'est très simple. Il suffit de créer un projet de type "Bibliothèque de classes" et d'y créer les classes voulues dans un espace de nom quelconque. Lorsque l'on compilera, le fichier .dll sera créé dans le répertoire du projet, sous bin/Release.

Pour utiliser une librairie, on doit avoir accès au fichier .dll, puis on ajoutera une référence vers ce dernier dans notre projet. On n'a qu'à cliquer avec le bouton de droite sur la branche "Références" de l'explorateur de solutions, puis de choisir "Ajouter une référence". Dans la fenêtre qui s'ouvre ensuite, on ira sur l'onglet "Parcourir" pour aller chercher le .dll.

Normalement, on ajoutera un using espace_de_nom; dans les premières lignes, pour simplifier la syntaxe.

Dans un contexte professionnel, on produira très souvent une librairie de classes qui sera utilisée par quelqu'un d'autre (le client). Il arrive également régulièrement qu'on utilise une librairie de classe d'un fournisseur. Dans ce cas, on n'a pas accès au code et on doit donc se fier uniquement à la documentation.

Votre travail pour cette semaine

Question de simuler cette interaction avec les librairies, vous devrez produire une librairie qui permettra une communication par sockets. Votre librairie devra comprendre une seule classe qui englobera les fonctionnalités de serveur et de client. On veut au minimum:

  • Un socket passif utilisé par le serveur lors de l'écoute
  • Un socket actif utilisé par le serveur et par le client lors de la communication
  • Un tableau de bytes utilisé pour lire et écrire dans les sockets
  • Une variable string pour contenir des messages lus ou écrits
  • Des constructeurs qui initialiseront les attributs (on pense au minimum à un constructeur acceptant une adresse IP dans un string, et un port - si l'objet servira de serveur, ce sera l'adresse sur laquelle il écoute, s'il servira de client, ce sera l'adresse du serveur sur lequel se connecter).
  • Des fonctions qui exposent les différentes fonctionnalités de bases des sockets telles que vues en classe.
    • Créer un socket actif ou passif selon l'usage demandé
    • Attacher un socket passif à un EndPoint
    • Mettre un socket passif en mode d'écoute
    • Accepter une connexion sur un socket passif, ce qui créera automatiquement un socket actif pour les communications.
    • Connecter un client sur un serveur.
    • Écrire un message sur le socket
    • Lire un message sur le socket
    • Convertir un message string en tableau de bytes et vice-versa
    • Fermer le socket

L'idée est d'avoir une classe qui encapsule un socket actif et un socket passif, classe qui pourra être utilisée pour créer un serveur ou un client, puis pour se connecter et échanger des messages (un serveur n'aura jamais à dialoguer avec plus qu'un client). L'utilisateur ne doit pas avoir à utiliser d'objets de System.Net ou System.Net.Socket - cette complexité doit lui être cachée. Il n'interagira qu'avec une instance de votre classe.

Évidemment, il y a plusieurs façons d'implémenter tout ceci et les spécifications du travail sont laissées intentionnellement vagues afin que chacun se retrouve avec quelque chose d'un peu différent. C'est à vous de faire une analyse intelligente de façon à créer une classe facile à utiliser et complète. On s'attend à ce que tous vos attributs soient privés et que des propriétés publiques permettent de les atteindre. Vous devrez également produire une documentation simple qui montre les différentes fonctionnalités de votre classe (propriétés, fonctions (paramètres et valeur de retour), constructeurs). On s'attend également à ce que toutes les opérations sur les sockets soient faites dans des blocs try/catch et que les exceptions soient attrapées et gérées.

Vous pouvez faire ce travail en équipe de deux.

La semaine prochaine, vous devrez utiliser la .dll d'une autre équipe pour implémenter un petit programme de client/serveur simple. Pour tester votre librairie, vous pouvez donc simplement créer un client et un serveur utilisant votre .dll, qui peuvent se connecter l'un à l'autre et s'échanger des messages dans les deux sens.

La remise

Vous devrez remettre par courriel à votre charmant professeur un fichier .cs contenant votre classe. Ne faites pas de copier/coller de texte. Votre courriel doit me parvenir au plus tard mercredi le 14 octobre à 8h55.

Ne soyez pas en retard car je devrai compiler votre librairie pour la remettre à une autre équipe pour la suite du travail!

Et maintenant: libraires, à vos claviers!