Sommaire
Dedicace
3
Remerciements
3
Avant Propos
3
Introduction
3
PREMIERE PARTIE -- Présentation de
l'école
3
I. HISTORIQUE ET VOCATION
3
II. STRUCTURES ET MOYENS
3
1. C.P.P.S et C.O.D
3
2. Structure administrative et
pédagogique très renforcée
3
3. Cadre agréable et
adéquat
3
DEUXIEME PARTIE -- Etude du thème
3
A. PRESENTATION DES OUTILS DE
L'APPLICATION
3
I. CHOIX DES OUTILS ET DE LA PLATEFORME
3
1. La plateforme
3
2. Le langage
3
3. Méthodes spéciales
utilisées
3
II. PRINCIPE DE L'ARCHITECTURE
CLIENT-SERVEUR
3
1. Architecture d'un client
3
2. Architecture d'un serveur
3
3. Quelques classes
3
III. ANALYSE ET MODELISATION UML
3
1. Diagramme Use case de l'application
3
2. Diagramme de séquence de la
connexion au serveur
3
3. Diagramme de séquence du jeu
3
B. L'APPLICATION SERVEUR
3
I. Architecture du Serveur
3
II. Les principales Classes, Méthodes
et leurs rôles
3
1. Les principales classes
3
2. Les méthodes de la classe
Server
3
3. Les méthodes de la classe
Lanceur_thread
3
4. Les méthodes de la classe
Server_form
3
III. Les Interfaces du logiciel Serveur
3
C. L'APPLICATION CLIENTE
3
I. Architecture du Client
3
II. Les principales Classes, Méthodes
et leurs Rôles
3
1. Les principales classes
3
2. Les méthodes de la classe
Form_Game
3
3. Les méthodes de la classe
Form_Client
3
4. Les méthodes de la classe
Connexion_Serveur
3
5. Les méthodes de la classe
Lanceur_Thread
3
6. Les méthodes de la classe
MyStreamWriter
3
7. Les méthodes de la classe
MyStreamReader
3
III. Les Interfaces du logiciel Client
3
D. L'INSTALLATION DU LOGICIEL
3
TROISIEME PARTIE - Suggestions et
Améliorations possibles
3
Conclusion
3
Wébographie
3
Bibliographie
3
Dedicace
DEDICACE
Ø Au Seigneur Mon Dieu le Tout Puissant et
Miséricordieux, qui exauce mes voeux et entend mes
prières ;
Ø A ma mère, une mère merveilleuse,
bienveillante et affectueuse qui n'a ménagé aucun effort tant
moral que matériel pour me soutenir.
Reçois ici ma chère maman toute mon
affection et
ma reconnaissance.
Ø A mon père en guise de
reconnaissance pour les nombreux sacrifices, tant moral que matériel,
que vous avez consenti pour ma réussite scolaire.
Recevez toute mon affection et mes sentiments de
gratitude.
Remerciements
Nos sincères remerciements à toutes les
personnes qui m'ont permis et qui ont contribué à
l'élaboration de ce mémoire de fin de 2nd cycle
(BAC+4) - cycle ingénieur:
ü A Monsieur Abdesselam ERKIK Président
Réseau Universitaire Euro-Africain
ü A Monsieur Anass ERKIK le Directeur
Général du Groupe SUP'MANAGEMENT,
ü A tout le personnel de l'école SUP'MANAGEMENT
(Administration et tout le corps enseignant),
ü A toute ma famille, particulièrement à ma
chère mère Korogo Adam, à mon cher père M. Salif
Soumbougma pour leurs soutiens. Je vous adore Papa et Maman.
ü A mes amis, collègues de classe et amies au
Maroc pour leurs soutiens et éventuels dévouements,
particulièrement Mlle KAMAYE Samira qui a toujours été
présente et aux petits soins pour mener à bien ce mémoire.
Je l'en suis vraiment reconnaissant !
ü A tous ceux qui, d'une manière ou d'une autre
m'ont aidé et encouragé tout au long de mes études et de
mon stage.
Nous avons été particulièrement
touchés par la bonne volonté et la disponibilité de
Monsieur Naoual mon Professeur et Directeur de mémoire.
Espérons que ce travail pourra compenser
toutes les énergies mobilisées
Avant Propos
Définit comme étant la science du traitement
automatique de l'information, l'informatique est devenue aujourd'hui un moyen
moderne et incontournable du développement basé sur l'utilisation
de l'ordinateur. Présente dans tous les domaines, elle ne cesse de se
développer, de changer de façade. Elle aide à la
décision et aux traitements de multiples tâches et tâches
répétitives, etc. Enfin présente dans tous les domaines.
Avec les Nouvelles Technologies de l'Information et de la Communication (NTIC),
nous assistons à un développement scientifique et technique
fulgurant et exponentiel car présente maintenant dans notre quotidien.
Le progrès dans le domaine informatique a
entraîné la création de nombreuses écoles
d'informatique dont le Groupe SUP'MANAGEMENT qui offre une formation
centrée sur toutes les nouvelles technologies et domaines les plus
utilisés permettant ainsi aux étudiants d'être très
compétents en entreprise. Cette formation est continuelle et va jusqu'au
Master (BAC + 5). Notre choix s'est porté sur le Groupe SUP'MANAGEMENT
Fès - Maroc car il constitue une école-référence en
matière d'informatique et de nouvelles technologies au Royaume du Maroc
et dans le monde.
La formation d'ingénieur dure trois (5) ans et se
déroule en deux (2) phases : une phase théorique
sanctionnée par deux examens écrits semestriels et une seconde
phase couverte par un stage pratique en entreprise de durée variable en
fonction du cycle dans le but de réaliser un rapport qui sera
présenté et soutenu publiquement devant un jury. Cela aussi
permet d'approfondir nos connaissances théoriques et acquérir des
connaissances pratiques et professionnelles.
Dans le souci de rendre notre apprentissage accessible
à tout le monde, nous avons entrepris une étude faite
d'informations nécessaires tirées de l'observation, de la
manipulation, de la toile (Internet) et des renseignements reçus de nos
professeurs. Toutes ces informations recueillies sont organisées et
regroupées dans ce mémoire de fin de cycle.
C'est dans cette même optique que le présent
mémoire s'inscrit comme étant le fruit bénéfique de
notre séjour au Groupe SUP'MANAGEMENT et aussi au Royaume du Maroc. Il
sanctionne quatre années de formation au Diplôme
d'Ingénieur Cycle Normal option Ingénierie Informatique
effectuées au sein du Groupe SUP'MANAGEMENT (Fès - Maroc).
Introduction
L'évolution des langages de
programmation vers le langage logique presque humain a conféré
à l'informatique le pouvoir de la création d'applications de plus
en plus sophistiquées.
Cela explique donc l'évolution des logiciels
très performants sur le marché. Les applications deviennent de
plus en plus intelligentes et rapides tant sur le plan communication que celui
de l'exécution. Et cela, dans le souci de rendre toutes les taches
vraiment automatiques et capables d'être traitées par un
ordinateur. Mais force est de constater que la plupart des applications
développées sont plus monopostes. C'est pour cela pendant notre
étude, nous nous sommes intéressés à une
application multiposte et réseau utilisant un serveur digne de ce
nom.
Et c'est à cet effet que nous avons orienté
notre étude sur le thème « SERVEUR DE JEU
D'ÉCHECS EN RÉSEAU ». Cette
étude nous permettra de comprendre les taches effectuées par un
serveur de jeu et comment les clients ou joueurs y interviennent pour jouer.
Tout au long de l'étude de notre document
articulé sur trois (3) grandes parties ou axes, nous présenterons
notre structure de formation (SUP'MANAGEMENT) dans la première
partie ; par la suite aborder notre thème d'étude dans la
seconde partie c'est-à-dire décrire le fonctionnement de
l'application serveur ainsi que l'application cliente et expliquer le
fonctionnement des méthodes qui interviennent dans les échanges
de données entre les applications clientes et l'application serveur; et
pour finir la troisième partie traite essentiellement du
déroulement pratique de nos quatre années d'études et des
critiques que nous avons à faire.
PREMIERE PARTIE --
Présentation de l'école
PREMIERE PARTIE
PRESENTATION DE L'ECOLE SUP'MANAGEMENT
I. HISTORIQUE ET VOCATION
Depuis 1992, le Réseau
Universitaire Euro-Africain - Groupe SUP'MANAGEMENT rayonne sur l'Afrique
pour former les managers et les informaticiens de demain. Le Réseau
Universitaire Euro-Africain est présent sur 7 pays : Le
Maroc, L'Espagne, Le Mali, La Côte d'Ivoire, La Mauritanie, Le
Sénégal et Les Îles Comores, et est
représenté dans 13 pays africains à savoir : Djibouti,
Tunisie, Guinée, Gabon, Cameroun, Benin, Togo, Niger,
Burkina Faso, Tchad, Centrafrique, Congo et Congo
Démocratique. Le Réseau, qui s'est forgé une image de
leader sur le Continent, accueille, chaque année, plus de 2000
étudiants de 23 nationalités différentes dans ses 8
centres axés sur trois pôles de formation :
· Sup'Management (Formation
supérieure)
· Infohouse (Formation
professionnelle)
· et Cerf Consult (Formation
continue).
Le Réseau Universitaire Euro-Africain / SUP'MANAGEMENT,
est un réseau d'Ecoles Internationales de Management et de Technologies
de l'information qui a pour vocation de former des cadres managers et des
dirigeants d'entreprises dans ses différentes entités, et ce via
:
· Une formation polyvalente et opérationnelle de
haut niveau,
· Un enseignement pragmatique et en phase avec les
exigences du monde professionnel,
· Une vie associative qui consacre
l'épanouissement individuel et le développement personnel,
· Une préparation aux métiers de
décideurs et de managers dotés d'une bonne capacité
d'adaptation, d'esprit de challenge, de créativité et
d'initiative.
SUP'MANAGEMENT offre en outre des formations
supérieures de niveau d'ingénieur, grâce à ses
cycles de formation offerts dans le cadre de deux
Pôles: School of Business
Administration et School of
Engineering. Ces formations peuvent être
complétées par des troisièmes cycles et des études
doctorales sur les centres du réseau en Afrique, en Belgique, en
Espagne, en France ou aux U.S.A.
Pour accomplir adéquatement son projet
pédagogique ambitieux et innovateur, le Groupe dispose d'une
équipe d'une centaine de cadres et de plus de 150 professeurs, qui
veille, au quotidien, sur le bon déroulement des activités
académiques et parascolaires des établissements du réseau,
sur l'encadrement et l'accompagnement des étudiants.
Les différents départements, la cellule
d'orientation, le comité pédagogique, la cellule d'assistance
à l'emploi et à la création d'entreprise, constituent par
ailleurs des outils non moins importants au service des étudiants.
II. STRUCTURES ET
MOYENS
Le Groupe est doté de structures et de moyens
importants, dont notamment :
1. C.P.P.S et C.O.D
Il s'agit d'un Comité de Parrainage et de Pilotage
Scientifique (C.P.P.S) et d'un Conseil d'Orientation et de Développement
(C.O.D). Composés de personnalités de renom du monde de
l'éducation et des affaires et de la société civile, ces
organes veillent au suivi et au réajustement de la politique
pédagogique du Groupe et de sa stratégie de développement,
compte tenu des mutations et des exigences du monde socio-économique.
2. Structure administrative et
pédagogique très renforcée
· Une Présidence du Réseau Universitaire
Euro-Africain
· Une Direction Générale par filiale
entourée d'une équipe multidisciplinaire d'Administrateurs,
· Des Départements internes (Direction des Etudes,
Relations Extérieures, Relations Internationales, etc. ...) et diverses
cellules pédagogiques.
· Un Corps Professoral (dont un taux important de
permanents) composé d'universitaires reconnus et de professionnels
expérimentés.
3. Cadre agréable et
adéquat
· Une multitude de salles de cours et de travaux
pratiques,
· Des équipements pédagogiques et
scientifiques de pointe,
· Des centres informatiques,
· Des cybers nets et des
logithèques-médiathèques,
· Des centres de documentation,
· Des cafétérias et des espaces de
détente.
DEUXIEME PARTIE -- Etude du
thème
DEUXIEME PARTIE
ETUDE DU THEME :
SERVEUR DE JEU D'ECHECS EN RESEAU
A. PRESENTATION DES OUTILS DE
L'APPLICATION
Notre étude sera orientée principalement sur
l'analyse, la conception et l'élaboration d'un serveur de jeu et un
exemple de client ou de l'application utilisée par les joueurs pour se
connecter au jeu et participer au jeu. On peut même utiliser Internet
(débit min. 256 Kb pour le client) si l'adversaire est a
l'autre bout du monde.
Il faut souligner qu'en jouant pour pouvez en même temps
discuter comme sur YAHOO ou MSN. Notre application se présente en fait
en deux applications :
· Une application SERVEUR et
· Une application CLIENTE
Notre application qui se nomme « OUS
CHESS GAME » est un ensemble d'application Client-serveur
voué dans le service d'un jeu d'échecs en réseau. Le
serveur est nommé « OUS CHESS GAME
Server » et le client
« OUS CHESS GAME Player ». Le jeu
se déroule via un client. C'est-à-dire que pour jouer aux
échecs, le serveur de jeu doit être démarré et vous
devez connaitre son adresse IP et configurer le Player via
préférence pour pouvoir vous connecter. Ensuite si un autre
joueur est connecté vous pouvez jouer avec lui en double-cliquant sur
son nom !! C'est très simple.
L'élaboration de ces application nous a obligé
à faire appel aux récentes versions des langages de programmation
et les plus utilisées afin d'avoir les outils adéquats. A titre
indicatif, on vous informe que :
· L'application cliente est riche de 71
méthodes ou fonctions, 13 classes d'objets, 5 méthodes
déléguées et 5 winforms.
· L'application Serveur moins lourde est
constituée de 40 méthodes ou fonctions, 8 classes
d'objets, 1 méthode déléguée et 4
winforms.
Il nous a fallu exactement 8 mois et 23 jours pour concevoir
cette application qui pourrait être aussi améliorée par la
future génération.
I. CHOIX DES OUTILS ET DE LA PLATEFORME
1. La plateforme
On a opté pour l'utilisation de la plateforme Framework
.Net pour la conception et non Java. Le serveur fonctionne sous la version 3.5
et le client la version 2.0 pour lui permettre de pourvoir fonctionner sur tous
les ordinateurs. Java est beaucoup plus portable que le C# mais il existe une
version de .NET pour Linux, BSD, MacOs X, etc. développée par
Novell (www.mono-project.com). Quelques comparaisons C# 2.0 / Java 1.5 :
Ø Propriétés Get/Set en C# non
présentes en Java,
Ø Surcharge d'opérateurs en C# non présente
en Java,
Ø Types nullables en C# non présents en Java,
Ø Délégués en C# non présents
en Java,
Ø Contrairement au C#, il n'y a pas de type structure en
Java,
Ø Contrairement au C#, en Java certains types ne sont pas
des objets (ex: int),
Ø Facilité de la conception gratuite qui est super
assistée.
Et ce n'était que la version 2.0 car la version 3.0 et 3.5
apporte encore plus de nouveautés et d'amélioration.
Même si les outils DotNet ne sont pas gratuit mais en
valent le coup ! Le Framework .NET est un
composant
logiciel pouvant être ajouté au
système
d'exploitation
Microsoft Windows.
Il peut être téléchargé sur le site de Microsoft et
est également partiellement fourni dans certaines déclinaisons
commerciales. Microsoft a aussi développé une version
allégée du Framework pour le développement d'applications
pour son système d'exploitation pour
assistants
personnels (PDA) : le .NET compact Framework.
Le Framework gère tous les aspects de
l'exécution de l'application :
§ Il alloue la mémoire pour le stockage des
données et des instructions du programme ;
§ Il autorise ou interdit les droits de
l'application ;
§ Il démarre et gère
l'exécution ;
§ Il gère la réallocation de la
mémoire pour les ressources qui ne sont plus utilisées.
Microsoft® .NET (prononcé « point
net ») évoque à la fois une vision sur la
manière d'écrire les logiciels et un ensemble d'outils de
développement de logiciels indispensables à la
concrétisation de cette vision.
La vision .NET a pour ambition de donner corps à cette
capacité, de simplifier l'écriture de systèmes qui se
connectent et communiquent en toute sécurité entre eux à
tout moment, en tout lieu et sur n'importe quelle machine. Les Web Services
sont la technologie à la base de la mise en oeuvre de ce principe. Cette
technologie est à la fois une méthodologie et une couche de
transport pour le transit d'informations entre les composants sur des machines,
des réseaux et des systèmes d'exploitation différents.
La prise en charge de Web Services est vaste. Un certain
nombre de sociétés utilisent déjà les Web Services
pour se connecter à leurs partenaires. Microsoft est en train d'ajouter
la prise en charge des XML Web Services à travers sa gamme
complète de produits. Du point de vue du développeur, .NET
facilite l'écriture de systèmes qui se connectent les uns aux
autres en utilisant Microsoft Visual Studio .NET, .NET Framework et les
XML Web Services.
.NET Framework est bien plus que les Web Services. Au coeur de
.NET se trouve le .NET Framework, qui comprend le Common Language Runtime et
les bibliothèques de classes. Ces deux composants fournissent le moteur
d'exécution et les API de programmation qui permettent de créer
des applications .NET.
Les applications compilées pour .NET ne sont pas
compilées directement en code natif, mais en un langage
intermédiaire appelé Microsoft Intermediate Language (MSIL).
Quand une application s'exécute pour la première fois, le
compilateur juste à temps du Common Language Runtime compile le code
MSIL en code natif avant son exécution. Le Common Language Runtime est
bien plus qu'un simple compilateur JIT ; il fournit également des
services d'exécution de bas niveau, comme la récupération
de l'espace mémoire, le traitement des exceptions, les services de
sécurité et le contrôle de sécurité du type
d'exécution. Étant donné le rôle du Common Language
Runtime dans la gestion de l'exécution, les programmes qui ciblent le
.NET Framework sont parfois appelés applications
« gérées ».
Le .NET Framework est un ensemble de classes de
création d'applications qui exécutent le Common Language Runtime.
Ces bibliothèques de classes assurent la prise en charge étendue
d'un large éventail de tâches, notamment l'accès aux
données, la sécurité, l'entrée/sortie de fichiers,
la manipulation XML, la messagerie, la réflexion des classes, les Web
Services, ASP.NET et les services Microsoft Windows.
L'attribut le plus unique de .NET est peut-être sa prise
en charge de langages multiples. Microsoft a déjà
expédié quatre langages commerciaux pour le .NET Framework :
Visual C#® .NET, Visual Basic® .NET, les Managed Extensions pour C++
et Visual J# .NET. De nombreux autres langages .NET compatibles sont
également en cours de développement, notamment Perl, Python et
COBOL.
Pour faciliter la création de langages pour le .NET
Framework, Microsoft a créé la Common Language Specification
(CLS). La CLS décrit les caractéristiques devant être
fournies par chaque langage pour permettre l'utilisation du .NET Framework et
du Common Language Runtime et l'interopérabilité avec des
composants écrits dans d'autres langages. Si un langage
implémente la fonctionnalité nécessaire, on dit qu'il est
« .NET compatible ». Chaque langage .NET compatible prend
en charge les mêmes types de données, utilise les mêmes
classes .NET Framework, compile dans le même langage intermédiaire
MSIL et utilise le même Common Language Runtime pour gérer
l'exécution. Au vu de ceci, chaque langage .NET compatible est un
citoyen .NET de première catégorie. Les développeurs sont
libres de choisir le meilleur langage pour un composant particulier sans rien
perdre des avantages et de la latitude résultant de la plate-forme. En
outre, les composants écrits dans un langage peuvent facilement
communiquer avec un composant écrit dans un autre. Par exemple, vous
pouvez écrire une classe en C# qui découle d'une classe de base
écrite en Visual Basic. La CLS a été soumise à
l'ECMA pour normalisation, ce qui encourage de nombreux développeurs de
langages à créer des versions .NET compatibles de nombreux
langages. Au moment où je vous écris, plus de 20 langages .NET
compatibles sont en cours de développement.
La figure 1 montre les divers composants de .NET
agencés sur le système d'exploitation. Le .NET Framework se
compose des quatre cadres bleus - qui représentent ASP.NET, Windows
Forms, ADO.NET et XML - et de sous-composants.
Figure 1 : L'architecture du .NET
Framework.
Pour permettre le développement de .NET, Microsoft a
réécrit ses outils de développement et les a réunis
sous le nom Visual Studio .NET. Visual Studio .NET prend en charge le
développement d'applications dans un langage unique ou dans plusieurs
langages. Le même environnement de développement
intégré (IDE) est utilisé pour la conception, le
développement, le débogage et le déploiement des
composants de .NET.
Il prend en charge la création d'applications pour
consoles, d'applications Windows, de DLL, d'applications Web, de Web Services
et d'applications pour appareils portables. Il a des fonctions uniques
ultra-productives telles que : IntelliSense ;
générateurs visuels pour Web Forms et Windows Forms, XML Schemas
et données ; débogueur inter-langages qui progresse de
manière transparente d'un code écrit dans un langage à un
autre ; intégration étroite au .NET Framework ; aide
dynamique qui fournit continuellement une aide contextuelle à mesure que
vous tapez ; liste des tâches qui indique les erreurs de compilateur
et les tâches à exécuter ; fonctions de conception
d'architecture comme une intégration à Visio et un Server
Explorer pour l'accès visuel aux bases de données, aux services
Windows, aux compteurs de performance et à des composants d'applications
côté serveur.
Microsoft Visual Studio .NET est un outil de
développement qui a été récompensé par la
profession. À ce jour, Visual Studio .NET a déjà
reçu de nombreux prix, notamment deux prix de la productivité
2002 SD Magazine et le prix d'excellence technique 2001 de PC
Magazine (à l'époque où le produit n'en était
qu'à sa version bêta).
Comparaison de .NET à
Java
Pour les développeurs Java chevronnés, .NET peut
rappeler la plate-forme Java ; elles fournissent toutes deux une
manière structurée de créer des applications, ont toutes
deux des langages qui se compilent en code intermédiaire et elles
proposent toutes deux une grande bibliothèque d'API pour le
développement d'applications. Toutefois, .NET s'articule autour de
plusieurs objectifs différents de la plate-forme Java.
Du point de vue conceptuel, Java est deux choses à la
fois : la plate-forme Java (runtime et API) et le langage Java. L'objet de
la plate-forme Java consiste à prendre en charge les applications
écrites dans le langage Java et compilées en code mobile Java.
Même s'il y a eu des tentatives de compilation d'autres langages en code
mobile Java, ces tentatives se résument essentiellement à des
exercices théoriques. L'idéal de Java a toujours
été un langage unique sur des plates-formes
multiples.
.NET est lui aussi deux choses en une : le .NET Framework
(runtime et API) et la pléthore de langages de programmation pris en
charge. L'objet du NET Framework consiste à prendre en charge des
applications écrites dans n'importe quel langage et compilées en
MSIL. L'objectif de .NET est une plate-forme unique partagée par des
langages multiples.
Avantages de .NET sur Java
En plus de sa latitude avec les langages, .NET présente
un certain nombre d'avantages supplémentaires sur Java. Certains
figurant parmi les plus significatifs sont récapitulés
ci-dessous :
Comme Java est multiplate-forme, l'ensemble des classes
d'infrastructures s'est traditionnellement limité à ce qui
était disponible sur toutes les plates-formes. Cette limitation affecte
à la fois la portée et la richesse des classes : leur
portée se voit réduite au plus petit dénominateur commun
des ordinateurs et systèmes d'exploitation disponibles. Elle influe
également sur la richesse même des classes. Les classes Java
intégrées sont généralement très simples et
les développeurs bâtissent souvent leur propre infrastructure
là-dessus ou doivent se tourner vers les infrastructures d'un tiers --
par exemple, l'analyse de documents XML. Pour analyser des documents XML dans
Java avant la sortie de JDK 1.4, vous deviez soit utiliser une
bibliothèque d'un tiers, soit écrire votre propre analyseur.
L'écriture de votre propre analyseur représente en
général plus de 100 lignes de code.
Le .NET Framework est bâti sur la plate-forme Windows.
Une version du Common Language Runtime et de la bibliothèque de classes
.NET est également disponible pour FreeBSD. Les classes offrent
l'éventail complet de ce qui est disponible sur cette plate-forme. En
outre, ces classes sont plus riches que ce qui est disponible dans Java :
.NET fournit plus une infrastructure de programmation qu'une base sur laquelle
créer une infrastructure de programmation.
La fidélité du .NET Framework est
supérieure à celle de la plate-forme Java. C'est la pleine
puissance de Windows qui est mise à la disposition des programmes .NET
et non pas le plus petit dénominateur commun de toutes les plates-formes
comme avec Java.
« ...la vérité, c'est que
l'écriture de code avec .NET signifie que Microsoft fournit tous les
outils conformes aux normes que 90 % des développeurs auront
probablement besoin d'utiliser, tandis que Java signifie toujours concocter une
solution à partir de morceaux disparates d'origines
diverses. »
Bornstein, Niel. Mai 2002. Pull Parsing in C#
and Java.
Écrivez une fois, déboguez partout
Alors que l'idéal de Java à savoir,
« écrire une fois, s'exécuter partout », a
son charme, la plupart des applications écrites aujourd'hui ne ciblent
qu'un seul système d'exploitation. Il y a deux raisons techniques
à cela : comme la portée et la richesse de l'infrastructure
Java sont limitées, les développeurs utilisent souvent des
classes propriétaires pour accéder à des fonctions mises
à la disposition de la plate-forme cible. Deuxièmement, comme les
incompatibilités persistantes entre les diverses implémentations
Java continuent à miner les efforts réels inter-plates-formes,
les développeurs doivent tester leur code sur chaque plate-forme qu'ils
désirent prendre en charge. Au vu de cela, certains développeurs
se moquent souvent de Java en l'appelant la plate-forme
« Écrivez une fois, déboguez partout ».
Sécurité
La sécurité est bien supérieure dans
.NET. En plus d'API pour la cryptographie, des cookies sécurisés
et de l'authentification, il propose également un mécanisme riche
et extensible d'assignation de différents niveaux d'autorisations
à différents groupes d'utilisateurs, selon l'origine du code. Par
exemple, l'ensemble du code de Microsoft peut être traité comme
étant sécurisé. Tout le code issu d'une URL
spécifique peut se voir accorder (ou refuser) l'accès en
lecture/écriture à des ressources spécifiques telles que
répertoire temp ou écran. En outre, les applications peuvent
être marquées comme exigeant certaines autorisations (par exemple,
exigence d'accès au système de fichiers). En l'absence de ces
autorisations, l'application ne se chargera pas. Comme le contrôle de
sécurité a lieu au moment du chargement, le développeur
n'a plus à se soucier d'écrire une logique de détection
d'échec de sécurité à travers l'application. Ce
contrôle est géré par une nouvelle technologie du nom de
« sécurité d'accès du code », qui
fonctionne pour du code chargé à partir d'Internet ou de la
machine locale.
Gestion des numéros de
versions
Le .NET Framework a un système de contrôle des
versions plus robuste que Java. Dans Java, si deux versions d'une même
classe sont installées, l'exécution Java chargera simplement la
première classe qu'elle trouvera sur le chemin de classe, ignorant
l'autre version. En revanche, .NET a été conçu pour une
prise en charge riche des versions. Avec une exécution côte
à côte, deux versions différentes ou plus appartenant
à la même classe peuvent être chargées et
exécutées simultanément. Chaque application peut choisir
son mécanisme d'association : établissement d'une
association à une version spécifique d'une bibliothèque de
classes, à la dernière version de la bibliothèque ou
à la version d'un endroit particulier. En outre, cette politique peut
être appliquée sur la base machine par machine pour ignorer ou
préciser davantage le contrôle des versions. Cette attention au
contrôle des versions trouve son prolongement dans les langages de
programmation. Par exemple, dans le langage C#, les méthodes sont non
virtuelles par défaut et les développeurs doivent déclarer
explicitement les méthodes ignorées. Cela signifie que les
composants ne peuvent pas accidentellement casser le comportement dans les
classes de base. C# n'exige pas que le développeur déclare
explicitement quelles exceptions peuvent être introduites par une
méthode : si la liste des exceptions change, le code client
fonctionnera toujours.
Performance
Là où .NET surpasse Java, c'est dans sa
capacité à peaufiner le comportement de l'application et sa
performance. Les blocs fonctionnels de l'application centrale sont synonymes de
modularité et haut rendement. Par exemple, avec l'accès hors
ligne aux données ADO.NET, un plus grand nombre de fonctions de
données peuvent avoir lieu en mémoire, là où la
Java Database Connectivity (JDBC) exige un retour à la base de
données. En outre, l'architecture de l'application .NET a
été conçue pour être plus rapide. Par exemple, les
pages Web ASP.NET procurent une nette amélioration des performances
comparativement aux Active Server Pages (ASP), Java Server Page (JSP) et
langages de script incorporés HTML. Comparée à la
plate-forme Java, la performance de .NET est non seulement meilleure dans les
scénarios mono-utilisateur, mais aussi dans les scénarios
multi-utilisateurs massifs.
C'est pour cela que le Framework .NET est qualifié
d'environnement « managé ». Il est composé de
deux blocs principaux :
Ø Le CLR (Common Language
Runtime) et
Ø la
bibliothèque
de classes .NET.
a. Le CLR (Common Language
Runtime)
Le CLR est à .NET ce que la
JVM
est à
Java,
c'est-à-dire une
machine virtuelle,
sans laquelle l'exécution de code .NET ne serait pas possible. À
l'inverse de son concurrent, le Framework .NET a été conçu
pour permettre l'interopérabilité entre différents
langages.
Figure 1 : Schéma explicatif du
Common Language Infrastructure (CLI)
Quel que soit le langage utilisé pour écrire une
application .NET, le code doit être transformé en
MSIL (Microsoft Intermediate Language). Ce code
intermédiaire ne comporte aucune instruction relative au matériel
(i.e. hardware) ou au système d'exploitation. Il ne peut donc pas
être exécuté directement. Malgré cela, on pourrait
tout à fait imaginer écrire directement une application en IL,
langage qui ressemble à l'assembleur, sans passer par un langage de
dernière génération comme le C#.
Le CLR est nécessaire pour
exécuter le code intermédiaire. Il est basé sur le
CTS (Common Type System) et le CLS
(Common Language Specification). Il apporte de nombreuses
fonctionnalités comme le
Garbage Collector
(la mémoire utilisée par l'application lors de l'exécution
est optimisée), la BCL (Base Class Library), et le
système de sécurité. Une fois le code présent dans
le CLR, il va enfin pouvoir être compilé par le
JIT
Compiler (Just in Time) en langage natif de la
machine.
Il existe trois types de JIT :
§ Pré-JIT : le code
entier est directement compilé ;
§ Econo-JIT : le code est
compilé par parties, et la mémoire libérée si
nécessaire ;
§ Normal-JIT : le code
n'est compilé que quand c'est nécessaire, mais est ensuite
placé en cache pour pouvoir être réutilisé.
Quel que soit le type de JIT, le but est
d'accélérer l'exécution du code en réutilisant
dès que possible le cache. À la première exécution,
le code est compilé. Par la suite et aussi longtemps que l'application
ne subit pas de modifications, le cache sera utilisé, d'où une
vitesse d'exécution bien plus rapide que lors de la première
exécution.
Le JIT fourni par Microsoft ne produit évidemment que
du code natif Windows, mais les spécifications étant disponibles,
il s'est trouvé un groupe de personnes ayant décidé de
porter .NET sur
Linux, donnant naissance
à la plate-forme de développement libre
Mono.
b.
Bibliothèques de classes .NET
Il y a trois couches au dessus du
CLR, chacune comportant des classes apportant des
fonctionnalités de plus en plus évoluées.
Ø Base
Class Library
Dans la première couche se trouve la BCL, rassemblant
des classes permettant les manipulations de chaînes de texte, la gestion
des entrées/sorties, des communications réseaux, des threads et
le design des interfaces utilisateur. Ces classes sont similaires à
celles présentes dans l'API Java développée par Sun. Par
exemple, la manipulation des chaînes est disponible dans la classe
String, dans les deux langages; la différence étant
qu'en Java il n'existe pas de type de base pour manipuler les chaînes (on
manipule des objets 'String'), alors qu'en .NET, le type string (avec
un 's' minuscule) a spécifiquement été défini.
Ø
Data and XML Classes
La deuxième couche est composée de deux
bibliothèques
de classes d'accès aux données. Tout d'abord,
ADO.NET, s'élevant sur les bases de l'ancien ADO
(ActiveX Data Objects) utilisé par les développeurs ASP,
et permettant l'accès sous format XML aux interfaces de bases de
données
SQL
Server,
ODBC,
OLE
DB,
Oracle
et
Sybase, et
bien sûr aux fichiers XML. Les XML Classes permettent de
manipuler les données XML. On y trouve par exemple les classes
XSLT permettant la
transformation d'un document XML vers n'importe quel type d'autre document. Un
autre exemple, il est très facile de charger un document XML dans une
table, et vice versa, grâce au XML sous-jacent.
Ø XML Web Services,
Web Forms, Windows Forms
La dernière couche, la plus élevée, est
utilisée pour la création de
Web Services, de pages
Web, et d'applications Windows. Les deux premiers forment
ASP.NET, là aussi une
référence à l'ancien langage de programmation Web. Lorsque
vous visitez des sites Internet, vous pouvez remarquer les pages se terminant
par .aspx qui sont des pages Web écrites en .NET, tandis que
les pages écrites en ASP se terminent en .asp (pour s'amuser on
peut très bien modifier les configurations du serveur IIS de Microsoft
pour modifier l'extension des fichiers ASP.NET alors que ce n'est pas une
généralité).
Ø Structure d'une
application .NET
L'unité de base d'une application .NET est
appelée un assemblage (assembly). Il s'agit d'un ensemble de
code, de ressources et de métadonnées. Un assemblage est toujours
accompagné par un manifeste (assembly manifest) qui
décrit ce qu'il contient : nom, version, types de données
exposées, autres assemblages utilisés, instructions de
sécurité. Un assemblage est composé de un ou plusieurs
modules qui contiennent le code.
Ø Compilation et
exécution d'une application .NET
Tout comme avec java, quand une application .NET est
compilée, elle n'est pas compilée en code binaire machine, mais
dans un code binaire intermédiaire MSIL. Une application consiste donc
en un ensemble d'assemblages contenus dans un ou plusieurs fichiers
exécutables ou fichiers DLL en MSIL. Au moins un de ces assemblages doit
contenir un point d'entrée afin de démarrer l'application.
Quand l'exécution d'un programme démarre, le
premier assemblage est chargé en mémoire. Le CLR commence par
examiner les permissions demandées par cet assemblage et les compare
à la
politique
de sécurité (security policy) du système. Puis, si
l'assemblage est autorisé à s'exécuter, un processus est
créé pour exécuter l'application. Le premier morceau de
code nécessaire à l'exécution est chargé en
mémoire et est compilé en code binaire natif par le compilateur
JIT (Just-In-Time, juste à temps). Une fois compilé, le
code est exécuté et stocké en mémoire sous forme de
code natif, garantissant ainsi que chaque portion de code n'est compilée
qu'une seule fois lors de l'exécution de l'application..
Ø .NET 3.0
Cette version du Framework inclut Windows Workflow Foundation (
WF),
Windows Communication Foundation (
WCF),
Windows Presentation Foundation (
WPF)
et Windows CardSpace. WinFX est l'ancien nom du projet de développement
de
Microsoft pour son nouveau
système
d'exploitation
.NET
Framework 3.0. WinFX est
le nom du modèle de développement intégré à
Vista. Bien
que servant de base à tous les développeurs qui veulent
créer une application sur Vista, WinFX sera également disponible
pour
Windows XP et
Server
2003, avec toutefois certains raffinements en moins. En fait, WinFX est
désormais renommé pour mieux refléter son héritage,
à savoir Framework .NET 3.0. Contrairement aux deux versions
précédentes, cette troisième version inclut bien plus
d'éléments :
·
Windows Presentation Foundation, anciennement Avalon
·
Windows Communication Foundation, anciennement nommé Indigo
·
Windows Workflow Foundation
· CardSpace, anciennement nommé InfoCard
Le nouvel environnement inclut bien entendu également les
autres éléments du Framework .NET, à savoir :
Le
CLR (Common
Language Runtime) ,
ASP.NET , WinForms,
ADO.NET
Ø .NET
3.5
La version 3.5 du Framework inclut le Framework LINQ (Language
INtegrated Query) permettant des requêtes objet aussi bien sur des Data,
des Collections, du Xml ou des DataSets. Elle intègre également
le Framework Ajax.Net avec de nouveaux protocoles (
AJAX,
JSON,
REST,
RSS,
ATOM) et d'autres standards
WS.
En conclusion, le .Net est une
plateforme uniformisée et à vocation universelle. Elle facilite
"nettement" le développement d'applications pour ceux qui
maîtrisent la
POO,
proposant une hiérarchie d'objets ainsi qu'une harmonisation
générale des
API. Mais
les programmes générés exigent des ordinateurs
dotés d'une surcouche logicielle et donc devant être de plus en
plus puissants.
2. Le langage
Plusieurs langages étant disponibles dans notre
programme de cette année on choisi un des langages de la suite Visual
Studio 2008 qui comporte des langages tels que le
C# (mélange de
C++ et de
Java), le
J# (proche du Java, mais non
compatible Java) et le
Visual Basic .NET.
On a opté pour C# car il est moderne et est un mélange de C++ et
de JAVA et est un langage de dernière génération.
Grâce à la disponibilité des spécifications
techniques, différents acteurs sont libres d'ajouter le support pour un
autre langage. Il existe aussi des implémentations
libres de dot net,
notamment
Mono et
DotGNU.
Le C# facilite la tâche des développeurs en
proposant une approche unifiée à la conception d'applications
Windows ou Web, tout en introduisant des facilités pour le
développement, le déploiement et la maintenance
d'applications.
3. Méthodes spéciales
utilisées
Les méthodes délégués
(delegates en anglais) sont une des spécificités de
C# par rapport à Java : le
mot-clé delegate offre la possibilité de
créer des classes particulières, appelées
"délégations", dont les instances sont nommées
"délégués". Ces classes permettent
d'établir un contrat entre l'émetteur et le récepteur - en
cela, elles sont proches des interfaces, sauf qu'un
délégué n'établit son contrat qu'avec une
méthode de la classe déléguée.
Que sont-ce, donc, les délégués ? Ils
sont définis comme des pointeurs de fonction orientés objet et
sans restriction de type (type-safe). Plus simplement, ils sont souvent
utilisés comme base de la gestion d'événement au sein de
.NET, car ils facilitent l'enregistrement d'un événement. Ils
mettent en place un système de rappel (callback) beaucoup plus
sécurisé, indiquant à une fonction de
référer à une autre. Plus que de simples pointeurs de
fonction, ils permettent de préciser le nombre d'arguments à
prendre en compte, et le type de chacun, ainsi que le type de valeur
retournée et les conventions d'appel.
Les délégués sont des méthodes
appelables sans connaissance préalable de l'objet cible. Lors de la
création d'un événement, l'émetteur ne peut pas
forcément connaître l'objet/la méthode qui va gérer
son événement. Les délégués permettent de
prendre en charge ce rôle d'intermédiaire. Ils offrent aux
développeurs une méthode de dialogue entre objets, en permettant
de fournir en paramètre une fonction de même signature pour
déléguer l'exécution d'un morceau de code. Les
délégués sont ainsi très utilisés au sein de
.NET, dans les cas où un composant doit rappeler le composant qui
l'utilise.
L'intérêt n'est pas forcément visible : au
premier regard, on pourrait comprendre que les délégués
permettent d'appeler une fonction à la place d'une autre, ce qui peut
laisser sceptique. Les délégués répondent pourtant
à un besoin précis : prévoir dans le code d'appeler une
méthode, sans savoir lors de la phase de programmation quelle sera cette
méthode, celle-ci n'étant précisée que lorsque le
programme est lancé. Par exemple, on peut avoir besoin de lancer un tri,
mais ne pas être en mesure de déterminer le type de tri (Bulle,
Quick, Merge...) avant que l'application ne tourne. L'idée est que ce
n'est plus l'objet initial qui gère l'activité, il peut la
déléguer à une autre fonction qui prend en charge
l'ensemble du processus (c'est la délégation asynchrone).
Au sein du code C#, il faut commencer par établir un
type délégation (via le mot-clef delegate), en
précisant bien les arguments que la fonction
déléguée doit accepter. Il suffit ensuite de créer
un objet du type créé, en indiquant la fonction utilisée.
Cette fonction est dès lors disponible via le
délégué. On peut comparer un délégué
à une interface ne déclarant qu'une méthode.
Notre application possède à son sein des
méthodes déléguées qui sont très
importantes.
II. PRINCIPE DE
L'ARCHITECTURE CLIENT-SERVEUR
1. Architecture d'un client
L'architecture d'un programme réseau demandant les
services d'une application serveur sera la suivante :
ouvrir la connexion avec le service jeu de la machine
« serveur »
si réussite alors
tant que ce n'est pas fini
préparer une demande
l'émettre vers la machine
« serveur »
attendre et récupérer la réponse
la traiter
fin tant que
finsi
fermer la connexion
2. Architecture d'un serveur
L'architecture d'un programme offrant des services sera la
suivante :
ouvrir le service sur la machine locale
tant que le service est ouvert
se mettre à l'écoute des demandes de connexion
sur un port dit port d'écoute
lorsqu'il y a une demande, la faire traiter par une autre
tâche sur un autre port dit port de service
fin tant que
3. Quelques classes
Le framework .NET offre différentes classes
pour travailler avec le réseau :
· la classe Socket est celle qui
opère le plus près du réseau. Elle permet de gérer
finement la connexion réseau. Le terme socket désigne
une prise de courant. Le terme a été étendu pour
désigner une prise de réseau logicielle. Dans une communication
TCP-IP entre deux machines A et B, ce sont deux sockets qui
communiquent entre eux. Une application peut travailler directement avec les
sockets. C'est le cas de l'application A ci-dessus. Un socket peut
être un socket client ou serveur.
Si on souhaite travailler à un niveau moins fin que
celui de la classe Socket, on pourra utiliser les classes :
· TcpClient pour créer un client
Tcp,
· TcpListener pour créer un
serveur Tcp.
Ces deux classes offrent à l'application qui les
utilisent, une vue plus simple de la communication réseau en
gérant pour elle les détails techniques de gestion des
sockets.
.NET offre des classes spécifiques à certains
protocoles :
· La classe SmtpClient pour gérer
le protocole SMTP de communication avec un serveur SMTP d'envoi de courriers
électroniques
· La classe WebClient pour gérer
les protocoles HTTP ou FTP de communication avec un serveur web.
On retiendra que la classe Socket est suffisant en
elle-même pour gérer toute communication TCP/IP mais on cherchera
avant tout à utiliser les classes de plus haut niveau afin de faciliter
l'écriture de l'application TCP/IP.
a. La classe TcpClient
La classe TcpClient est la classe qui
convient dans la plupart des cas pour créer le client d'un service TCP.
Elle a parmi ses constructeurs C, méthodes M et propriétés
P, les suivants :
TcpClient(string hostname, int port) =>
C : crée une liaison tcp avec le service
opérant sur le port indiqué (port) de la machine
indiquée (hostname). Par exemple new
TcpClient("istia.univ-angers.fr",80) pour se connecter au port 80 de la
machine istia.univ-angers.fr
Socket Client => P : le
socket utilisé par le client pour communiquer avec le serveur.
NetworkStream GetStream() => M :
obtient un flux de lecture et d'écriture vers le serveur.
C'est ce flux qui permet les échanges client-serveur.
void Close() => M : ferme la
connexion. Le socket et le flux NetworkStream sont également
fermés.
bool Connected() =>
P : vrai si la connexion a été
établie.
b. La classe NetworkStream
La classe NetworkStream représente le
flux réseau entre le client et le serveur. Elle est
dérivée de la classe Stream. Beaucoup d'applications
client-serveur échangent des lignes de texte terminées par les
caractères de fin de ligne "\r\n". Aussi est-il intéressant
d'utiliser des objets StreamReader et StreamWriter pour lire
et écrire ces lignes dans le flux réseau.
c. La classe TcpListener
La classe TcpListener est la classe qui
convient dans la plupart des cas pour créer un service TCP. Elle a parmi
ses constructeurs C, méthodes M et propriétés P, les
suivants :
· TcpListener (int port) =>
C : crée un service TCP qui va attendre (listen) les
demandes des clients sur un port passé en paramètre (port)
appelé port d'écoute. Si la machine est
connectée à plusieurs réseaux IP, le service écoute
sur chacun des réseaux.
· TcpListener (IPAddress ip, int port) =>
C : idem mais l'écoute n'a lieu que sur l'adresse ip
précisée.
· void Start() => M :
lance l'écoute des demandes clients
· TcpClient AcceptTcpClient() =>
M : accepte la demande d'un client. Ouvre alors une nouvelle
connexion avec celui-ci, appelée connexion de service. Le port
utilisé côté serveur est aléatoire et choisi par le
système. On l'appelle le port de service. AcceptTcpClient rend
comme résultat l'objet TcpClient associé
côté serveur à la connexion de service.
· void Stop() => M
arrête d'écouter les demandes clients
· Socket Server => P le
socket d'écoute du serveur.
III. ANALYSE ET MODELISATION UML
1. Diagramme Use case de l'application
Figure 1: Diagramme de cas
d'utilisation
2. Diagramme de séquence de la
connexion au serveur
Figure 2 : Diagramme de la
connexion client vers serveur
3. Diagramme de séquence du jeu
Figure 3 : Diagramme de
séquence du déroulement du jeu
B. L'APPLICATION SERVEUR
L'application serveur est le chef d'orchestre, fournisseur du jeu
d'échecs et aussi l'aiguilleur des informations provenant d'un client
vers un autre. Dans cette application nous nous sommes beaucoup investi dans
l'utilisation des threads.
L'application est dotée d'un fichier d'aide de
dernière génération (.chm) aussi explicite que complet.
C'est un assez gros logiciel vu sa composition mais moins
impressionnant que le client.
Notre application Serveur possède au total :
v 8 Classes d'objets,
v 40 Méthodes ou Fonctions,
v 1 Méthode Déléguée,
v 4 winForms qui sont l'interface principale, celle de la
configuration, de l'Apropos de, et de l'outil de résolution DNS qu'on a
ajouté pour aider l'administrateur dans ses différentes
recherches.
I. Architecture du Serveur
Architecture structurée et représentée dans
cette image ci - dessous.
Figure 1 : Architecture de
l'application Serveur
II. Les principales
Classes, Méthodes et leurs rôles
1. Les principales classes
Figure 1 : Les principales
classes de l'application Serveur
La classe Program : C'est le point d'entrée principale de
l'application.
La classe Server_Form : Classe/Formulaire principal du
Serveur Initialise une classe Serveur et la commande suivant l'appui sur les
différents boutons / controles du formulaire.
La classe Server : Classe gérée par le
formulaire "Form_Server". Elle gère tous les échanges TCP avec
les clients et l'attente par les "TCPListener".
La classe Clients : Classe représentant un client du
serveur Contient les infos réseaux (TCPCLIENT, STREAMWRITER) mais aussi
le pseudo.
La classe UpdateArgs : Classe représentant les
paramètres lors de la génération d'un
événement CoDeco ( classe Serveur )ou d'un
événement Update( modification de la liste des clients) (classe
Lanceur_Thread).
La classe Lanceur_thread : Classe gérant l'appel d'un
Thread avec des paramètres, contient la liste des clients
connectés au serveur et le client courant.
2. Les méthodes de la classe
Server
La méthode actualisation_infos() : Gère
l'actualisation des données, la liste de tous les clients du serveur
à tous les clients. En cas lors d'un envoi, le client est
déconnecté ( une déconnexion génère un
événement dans le but de l'afficher sur le formulaire ).
La méthode ecoute_canal_data() : Méthode
d'écoute sur le port DATA Attends un client, puis créé un
thread qui va s'occuper de cette connexion DATA.
La méthode ecoute_canal_infos() : Méthode
d'écoute sur le port attend un client, puis créé un thread
qui va s'occuper de cette connexion INFOS ( Vérifie aussi le nombre de
clients maximum, renvoie un événement lors d'une connexion ).
La méthode server() : Constructeur Créer les
TcpListener sur les deux ports ( infos et communication pour les parties ).
La méthode my_thread_update() : Méthode
appelée au début de l'échange un client permet de
renseigner les infos provenant du clients dans la liste des clients du Serveur
de type List.
La méthode infos() : Renvoie une chaîne
contenant toutes les infos des clients actuellement connectés, chaine
contenant les infos de tous les clients ( nom, ip, port client, id ).
La méthode stats() : Renvoie une chaine contenant les
stats du serveur, nombre de clients, nombre de clients max, Version de l'OS,
Nom de la machine Utilisation Mémoire, Nom de l'utilisateur en cours,
Les ports utilisés.
La méthode stop() : Arrête l'instance de la
classe Serveur ( les TcpListeners, les threads, déco de tous les
clients, ... ).
La méthode start() : Méthode démarrant
le serveur ( appelée par le formualaire ), réussite du
démarrage du serveur ( true or false )
L'evenement codecoclient : Evénement lancé
lors de la connexion/déconnexion d'un client permet la mise a jour du
coté formulaire du serveur.
3. Les méthodes de la classe
Lanceur_thread
La méthode gerer_client_data() : Gère les
clients sur le port DATA attends une info provenant du client qui vient
d'ouvrir une connexion DATA puis retransmets l'information au correspondant
à l'en-tête du pseudo protocole ( encapsulation ) (défini
sur le client), s'il y a une erreur ou que le client cible n'existe pas, on
coupe la connexion sur ce port.
La méthode gerer_client_infos() : Gère le
début d'une comunication sur le port INFOS ( passage du pseudo du client
) puis actualise le paramètre dans la liste des clients.
La méthode Lanceur_thread() : Constructeur,
initialise la classe en fonction des paramètres Client Courant et Liste
des clients.
L'événement update : événement
généré après avoir récupéré le
pseudo pour actualiser le nom dans la liste des clients.
4. Les méthodes de la classe
Server_form
La méthode ajouterlog() : Méthode
appelée par le délégué du même nom affiche le
paramètre (Chaine à afficher dans les logs) dans la fenêtre
du journal.
La méthode Serveur_CoDecoClient() :
Récupère la Connexion / Déconnexion d'un client à
partir de l'événement CoDecoclient de la classe Server et modifie
le texte de log en conséquence.
La méthode update_form_co() : modifie l'aspect
graphique après la
connexion ( mets en état connecté ).
La méthode update_form_deco() : modifie l'aspect
graphique après la déconnexion ( mets en état
déconnecté).
III. Les Interfaces du logiciel Serveur
Concernant la partie visible de notre application, celle-ci
dispose d'une très jolie interface très conviviale lookée
au style vista glass conçu grâce au logiciel de traitement d'image
Adobe PhotoShop version CS3 Extended. Notre
application est aussi dotée d'un fichier d'aide bien
détaillé sur son utilisation et le copyright.
Sur l'interface principale (fig. 1) on s'aperçoit
que beaucoup d'informations comme l'heure, la date, l'adresse IP de la machine
hôte et l'état du serveur sont directement affichées. La
zone de texte au centre sert à afficher le journal de fonctionnement et
des événements qui se déroulent comme la connexion et la
déconnection d'un client, les informations sur les clients, les
statistiques détaillés sur le système d'exploitation
installé et les connectés. Cela rend l'utilisation facile.
Nous avons incorporé aussi un outil spécial de
résolution DNS nommé My OUS-IP .Net (fig. 7
et 8) qui fait la résolution DNS dans les deux sens
c'est-à-dire IP -> Nom et Nom ->
IP.
Voici les interfaces dont est constituée notre application
Serveur :
Figure 1 : Fenêtre
principale initiale
Figure 2 : Fenêtre
principale « serveur
démarré »
Figure 3 : Fenêtre
principale « serveur arrêté »
Figure 4 : Fenêtre
principale « Statistiques et infos»
Figure 5 : Fenêtre de
configuration ou préférences
Figure 6 : Menu contextuelle
dans le systray
Figure 7 : Fenêtre de
l'outil de résolution DNS
Figure 8 : Fenêtre de
l'outil de résolution DNS en exécution
C. L'APPLICATION CLIENTE
L'application cliente est en fait l'application qui permet de
jouer au jeu d'échecs en se connectant au serveur de jeu. C'est donc sur
cette application que le jeu se déroule. Dès votre connexion vous
verrez les différents joueurs connectés et il vous suffit de
double-cliquez pour lui demander de jouer avec vous. Si c'est un joueur distant
avec lequel vous jouez via le net il faudra une connexion ADSL avec un
débit minimal de 256 Kbits car le flux de donnée est important.
Notre application Cliente possède un total de :
v 13 Classes d'objets,
v 71 Méthodes ou Fonctions,
v 5 Méthodes Déléguées,
v 4 winForms qui sont l'interface principale, celle de la
configuration, de l'Apropos de, et du jeu qu'on a ajouté pour aider
l'administrateur dans ses différentes recherches.
I. Architecture du Client
Figure 1 : Architecture de
l'application Cliente
II. Les principales
Classes, Méthodes et leurs Rôles
1. Les principales classes
Figure 1 : Les principales
classes de l'application Cliente
La classe Program : c'est le point d'entrée principale de
l'application.
La classe Form_client : Classe/Formualaire
réprésentant le formulaire de base de l'application cliente.
Gère l'aspect de la connexion au serveur.
La classe Form_Game : Portion de la classe/Formulaire
Form_Game relative au chat et fonctions générales du formulaire
et Partie de la classe Form_Game gérant le jeu d'échecs en
lui-même.
La classe MyPictureBox : Classe réprésentant
une case de l'échiquier gère le deplacement des pions.
La classe MyPictureBoxEventArgs : Classe d'arguments pour
l'évenement MyClick contient 2 attributs entiers.
La classe MyStreamWriter : Classe relative au
pseudo-protocole utilisé lors des parties Ecriture permet une
encapsulation des données pour identifier la partie en cours à la
réception.
La classe MyStreamReader : Classe relative au
pseudo-protocole utilisé lors des parties Lecture permet une
sélection des informations à traiter et une
désencapsulation.
La classe Lanceur_Thread : Classe servant de conteneur pour
lancer des threads en prenant en compte des arguments ( ceux du constructeur de
classe ) PS : un méthode threadée ne peut pas prendre en compte
d'arguments.
La classe Connexion_serveur : Classe gérant la Partie
Réseau et les échanges avec le serveur : en particulier
l'actualisation des joueurs présents sur le serveur.
La classe ActuArgs : Classe d'arguments utilisés par
l'événement actualisation.
2. Les méthodes de la classe
Form_Game
La méthode Actualisation(): Méthode Actualisation
lancée dans un Thread elle permet la réception des données
du joueur distant et leurs répartition suivant le type (texte, "exit" ou
mouvement).
La méthode box_MyClick(): Méthode qui gère
les différents clic sur les MyPictureBox : arguments avec les
coordonnées de la Box.
La méthode créer_echequier(): Fonction qui
créer les PictureBox liées à l'échiquier et les
paramètrent.
La méthode deplacer():Fonction effectuant les
déplacements.
La méthode regle():Vérifie les règles en
faisant appel à des fonctions spécifiques pour chaque type de
pièce.
La méthode grenier():Fonction qui mets dans le grenier les
pièces mangées.
La méthode Methode_Deplace_Advers(): Fonction
appelée quand on reçoit un déplacement paramètre
« coup reçu ».
3. Les méthodes de la classe
Form_Client
La méthode Actu_methode(): Méthode appelée
par le délégué Actu modifie des infos graphiques.
La méthode Deco_Methode(): Méthode appelée
par le délégué Déco Modifie des infos
graphiques.
La méthode Server_actu(): Méthode appelée
sur l'événement Actu nécessite l'utilisation d'un
délégué.
La méthode Server_deco(): Méthode appelée
sur l'événement Deco nécessite l'utilisation d'un
délégué.
La méthode listView1_ItemActivate(): Méthode
lancée lorsque l'on double clique sur un joueur de la liste et qu'on
veut ainsi jouer avec lui. Initialise tout le nécessaire et lance un
formulaire Form_Game. On se connecte en DATA au serveur si la connexion a
réussie on extrait l'endpoint des infos affichées sur dans la
listview puis on envoie la demande de partie.
4. Les méthodes de la classe
Connexion_Serveur
La méthode attente_actu(): Méthode Threadée
attends les infos venant du serveur Fait le tri entre actualisation et infos
relatives aux parties lancées.
La méthode Connect(): Connecte le client au Serveur
suivant les paramètres donnés : IP du Serveur, Port
utilisé pour l'actu, Port sur lequel on se connecte pour les parties,
Nom d'utilisateur local (pour s'authentifier sur le serveur) et retourne
« Connexion Réussie ou pas ».
La méthode Disconnect(): Méthode appelée par
le bouton Disconnect et déconnecte le client.
L'évènement actu : Evénements lancé
par la classe lorsque l'on recoit une actualisation des personnes
présentes sur le Serveur.
L'évènement deco : Evénements lancé
par la classe lorsque le dialogue avec le serveur est coupé Permet de
gérer l'affichage du statut.
5. Les méthodes de la classe
Lanceur_Thread
La méthode Parse_reception_data() : Méthode
gérant toutes les données de parties. L'info recu commence par
"CTC", Voir la classe MyStreamWriter pour le format exact du pseudo-protocole
utilisé, Gère les différents messages possibles de ce
pseudo-protocole, Si c'est une demande de partie, on initialise et on
crée un nouveau, formulaire Form_Game.
6. Les méthodes de la classe
MyStreamWriter
La méthode WriteLine(): Méthode surchargée
de Writeline permet d'encapsuler l'information à envoyer dans un
"protocole" définit pour ce jeu définissant
émétteur et récepteur de l'info Chaine à envoyer
Retourne si l'envoi à réussi.
7. Les méthodes de la classe
MyStreamReader
La méthode ReadLine():Méthode bloquante retournant
la première infos recus venant de l'endpoint correspondant à
l'endpoint de l'objet. Teste parmi toutes les infos recues sur ce canal ce
qui est destiné au Form_Game propriétaire de l'instance de ce
MyStreamReader renvoi "Errno" sur déconnexion (under dev). Il retourne
la chaine recue et désencapsulée.
La méthode Create(): Fonction statique d'initialisation de
la classe.
La méthode Update(): Fonction Actualisant les infos
reçues Appelé dès que l'on reçoit une ligne qui
n'est pas de l'actu et qui commence par "CTC" ( client to client ).
Paramètre : nouvelle info.
III. Les Interfaces du logiciel Client
Concernant la partie visible de cette partie de notre
application, celle-ci dispose aussi d'une très jolie interface
très conviviale lookée au style vista glass conçu
grâce au logiciel de traitement d'image Adobe PhotoShop
version CS3 Extended. Cette application est aussi dotée
d'un fichier d'aide bien détaillé sur son
utilisation avec la règle du jeu des échecs pour ceux qui ne
savent pas y jouer et contient aussi le copyright du concepteur.
Sur la l'interface principale (fig. 1) on
s'aperçoit que des informations comme le pseudo du connecté, les
joueurs en ligne et l'état de connexion du joueur sont directement
affichées. La zone de texte au centre sert à afficher les joueurs
connectés. Cela rend l'utilisation et la demande de jeu faciles.
Voici les interfaces dont est constitué notre application
Cliente :
Figure 1 : Interface
principale « Mode non-Connecté »
Figure 2 : Interface
principale « Mode connecté »
Figure 3 : Interface de
réglage de préférence
Figure 4 : Interface de jeu et
du chat
D. L'INSTALLATION DU LOGICIEL
Figure 1 : Installation -
début
Figure 2 : Choix du type de
logiciel à installer : Serveur ou Player
TROISIEME PARTIE -
Suggestions et Améliorations possibles
TROISIEME PARTIE
AMELIORATIONS POSSIBLES
Un logiciel n'étant jamais vraiment terminé peu
a tout moment subir des améliorations. C'est pour cela on rencontre un
logiciel qui sort et après on fait sortir une autre version plus
évolué et amélioré que le
précédent.
Notre application est la version 1.0, alors les
générations futures peuvent améliorer et produire la
version 2.0 qui pourra peu être avoir comme amélioration :
Ø La gestion des joueurs par une base de données
légère,
Ø L'archivage des scores lors des jeux,
Ø La classification et la consultation des meilleurs
scores,
Ø L'amélioration de la beauté de
l'interface au fil des ans,
Ø L'ajout d'outils nouveaux,
Ø Amélioration de la qualité d'envois et
réceptions des données,
Ø Une meilleure optimisation du produit,
Ø Concevoir un serveur plus puissant et
optimisé,
Ø Ou carrément amélioration le code
source !
Ceci étant un des objectifs poursuivis en
matière de partage de connaissance que nous voulons atteindre. Il n'est
plus un secret pour personne que le rendement optimal recherché pour
une application requiert une collaboration ou une aide plus ou moins prompt de
plusieurs personnes.
Conclusion
Ces nombreuses années de théories suivies de
pratique et appuyer par les Ateliers de Formations Professionnelles et
couronnées d'un diplôme de Master
(Bac+4) nous a donné l'opportunité de
découvrir le milieu professionnel plein de surprise d'une part, et de
nous familiariser avec notre futur métier d'Ingénieur Concepteur
en informatique d'autre part. Ces années ont été
l'occasion pour nous de confronter nos connaissances à la pratique et
d'acquérir une expérience d'un sens professionnel.
Quant à notre thème de mémoire, il nous a
permis d'abord une connaissance sur le fonctionnement d'une application
réseau ou client-serveur et de la complexité des méthodes
qui peuvent intervenir dans cette application, ensuite de nous familiariser
à toute la nouvelle technologie et la puissance dont dispose la suite de
logiciel « Visual Studio 2008 Entreprise Edition » et la
plateforme Framework .Net qui marque incontestablement l'évolution des
langages ainsi que l'aisance de la programmation.
Le futur ingénieur plein d'expérience que
nous seront, devra disposer de patience, de dynamisme, de courage, de
persévérance et surtout de créativité compte tenu
du fait que la technologies développe de façon exponentielle, on
doit de temps à autre suivre des formations et se mettre à jour
continuellement afin de s'imprégner des nouvelles technologies de
pointe.
Au terme de notre étude, nous retiendrons sans
doute que les applications réseau sont très importants, beaucoup
utilisées pour les échanges entre deux hôtes et surtout
bénéficie d'un réel développement. C'est l'un des
domaines les plus indispensables et les plus évolutives en
matière d'informatique. Elle est incontournable car de nos jours, le
développement et la complexité des échanges via le web en
passant par le développement de la toile et la division des bases de
données (Base de données reparties) est une
réalité. Par conséquent l'étude dans le but de
créer une telle application réseau nous a été
très bénéfique.
Notre formation reçue au groupe SUP'MANAGEMENT, le
suivi soutenu de notre travail et notre expérience pratique lors des
Ateliers de Formations Professionnelles et les stages nous permettront
d'embrasser avec aise, nous l'espérons, notre métier
d'Ingénieur.
Wébographie
o http://www.coupdepouce.com
o
http://www.commentcamarche.net
o http://www.wikipedia.org
o
http://dotnet.developpez.com/cours/?page=csharp
o
http://www.commentcamarche.net/forum/
o
http://tahe.developpez.com/dotnet/csharp/
o
http://alain.vizzini.free.fr/coursidxsharp.html
o
http://alain.vizzini.free.fr/coursidxcode.html
o
http://discala.univ-tours.fr/livres/LivreBases.html
o
http://www.labo-dotnet.com/Accueil/default.aspx
Bibliographie
o Les Threads en C# - Réseau Tech Note Collection Edition
ENI
o Programmer en C# Collection Les TP Informatiques Edition
ENI
o L'informatique et Programmation Robert Michel Di Scala Berti
Edition
|