Introduction
Bonjour a tous. Me voici de retour avec un nouveau tutoriel. Cette fois ci je vais vous montrer comment faire un logiciel client-serveur de clavardage. Cette première partie ne contiendra pas beaucoup de code. J'aimerais plutot montrer comment planifier une application avant de la développer. Dans les tutoriels suivant, nous pourrons voir l'application comme tel.
Veuillez noter que je planifie mon logiciel de clavardage a mesure que j'ecris ce tutoriel. Je n'ai pas encore commencer et je vais pouvoir partager chaque étape de sa création avec vous.
Pré requis
Avant de nous lancer dans le développement d'un logiciel de clavardage, il est important d'etre familier avec les sockets. Les trois tutoriels sur ce forum explique comment les utiliser. Je vais couvrir beaucoup d'autre points dans les tutoriels a venir, notemment la création d'un interface graphique et la sérialisation de classes pour envoie a travers un socket. Je n'ai pas écris de tutoriel sur ces sujets pour l'instant donc je vais essayer d'expliquer du mieux que je le peux.
Le 'Brainstorming'
J'aime bien apeller cette première étape 'brainstorming'. Ici il faut faire une liste de toute les choses que nous voulons pour notre programme. Sans rien de plus. Normalement je fais cela sur papier (Je suis possiblement 'old school' mais j'aime beaucoup travailler sur papier quand j'en ai l'occasion). Pour la première fois ici je vais tenter de faire tout sur ordinateur.
Donc voici les points que nous voulons:
1. La séparation du code en plusieur projets. Nous aurons besoin (évidemment) d'un projet pour le serveur, que je choisi ici de faire en application console et un projet pour le client en windows forms. Car j'aime bien garder les choses séparés, je ferai également une librairie (dll) partagée par le serveur et le client qui contiendera la définition des messages qui peuvent ètre envoyés ou recues. En suivant toujours la meme pensée, je ferai une librairie pour le serveur ainsi qu'une autre pour le client. Dans ces deux dernier .dll, j'écrirai la logique de connection, ce qui nous permettera de garder l'interface graphique séparé de la logique de notre application. Je fais cela car éventuellement nous pourrions vouloir remplacer notre interface graphique par une interface WPF, ou nous pourrions vouloir la refaire completement. Idem pour le serveur ou nous pourrions éventuellement faire un petit logiciel de controle qui nous permetterait de controler le serveur sur la machine directement.
2. Pour la partie partagée, je pense faire une classe de base qui a des fonctions read/write sur un buffer. Je compte ensuite les dérivés deux fois: une pour les messages du client et une autre pour les messages du serveur. Ensuite, chaque message pourra dériver la classe serveur ou client, puis définir la facon que les données sont écries/lues sur le buffer pour pouvoir ensuite les envoyés par socket. Il nous faudra aussi une énumération pour les identifiants de messages. Finalement, je devrai trouver un moyen de faire un header. Je ne sais pas encore exactement comment je veut le faire, possiblement un identifiant, suivit d'une longueur.
3. La partie client. Il serait interessant d'avoir au début une petite fenetre qui s'ouvre et nous demande notre nom d'utilisateur et notre mot de passe, ainsi qu'un addresse IP et un port sur lequel nous désirons nous connecter. Une fois connecter l'interface principale pourra s'ouvrir. Nous allons garder ca tres simple: Une boite qui listera les messages (probablement RichTextBox), une boite qui listera les utilisateurs connectés (probablement ListBox), une boite pour écrire (probablement TextBox en mode multi-ligne) et finalement un bouton d'envoi.
4. La partie serveur. Je compte premiere faire une interface de validation d'utilisateur qui pourra etre remplacer éventuellement tout en gardant la meme interface. Pour commencer je ferai une liste d'utilisateurs soit directement en code ou en fichier .txt. Éventuellement il faudrait remplacer cela par une base de données (il reste a voir is je fais un tutoriel la dessus ou pas). Nous aurons également besoin d'une partie réseau, qui comprend une partie authentification. Ensuite il sera important de garder une liste de clients. Vu que le serveur sera asser complexe, je ne veut pas tout penser au début, nous y reviendrons plus tard.
Le récapitulatif
Donc nous sommes presque pret a ouvrir notre environnement de développement! Nous aurons besoin, en abrégé:
-Un projet Windows Forms pour le graphique client.
-Un projet dll pour la logique client.
-Un projet console pour le graphique serveur.
-Un projet dll pour la logique serveur.
-Un projet dll partagée pour les messages client<>serveur.
Conclusion
Voila qui est terminée pour cette partie. Je viens de planifier un logiciel de clavardage client-serveur en 30 minutes a peine. Il reste beaucoup de planification a faire mais nous avons asser d'information pour pouvoir commencer.
Alors par quoi vais-je commencer en premier? Par la partie partagée! Pourquoi me demanderez-vous? C'est simple: les deux parties du logiciel seront dépendantes de cet librairie.
Alors revenez voir sous peu pour la deuxième partie!