Upload
tbatou-sanae
View
665
Download
109
Embed Size (px)
Citation preview
UNIVERSITE ABDELMALEK ESSAADI
ECOLE NATIONALE DES SCIENCES APPLIQUEES DE TETOUAN
Réalisé par : Encadré par :
Azghiri Walid Mr. Tabii Younes
Tbatou Sanae
Rapport d’une application de chat
client/serveur
1
Sommaire
I. Introduction
II. Remerciements
III. Contexte général du projet
A. L’objet du projet
B. Présentation du projet
IV. Implémentation
V. Environnement de développement
VI. Réalisation et mise en œuvre
VII. Conclusion
Application de chat avec socket en C++
A.U : 2011/2012
Génie Informatique [C++] Page 2
I. Introduction
e présent rapport décrit la réalisation d’une application de chat
client /serveur en utilisant les sockets. Ce dernier est le point de
communication par lequel un processus peut émettre ou recevoir
des données.
Ce projet avait pour objectif de construire d’une application de chat en
utilisant les sockets en C++ et de réaliser l’objectif de communication entre
plusieurs personnes connectés, soit de choisir de parler avec un personne
précis ou bien de parler avec plusieurs en même temps.
La réalisation du projet a fait appel à l’utilisation d’un Framework
d'applications multiplateforme et d'interface homme machine tel que
‘’QT creator’’ pour mettre en place l’interface de chat et bien
ergonomiques en utilisant le langage C++.
L
3
II. Remerciements
Au terme de ce travail, Nous tenons aussi à témoigner de notre
profonde gratitude à notre professeur C++ : Mr TABII YOUNES qui
n’a épargné ni son temps ni son énergie pour nous aider à faire
aboutir ce travail et pour leur soutien, leur collaboration et leur
disponibilité tout au long du travail.
Merci
Application de chat avec socket en C++
A.U : 2011/2012
Génie Informatique [C++] Page 4
III. Contexte du projet
A. L’objet du projet
Dans un premier temps , ce projet est pour le but de prendre en main
les concepts de la programmation réseau par l’utilisation de
l’interface des sockets. Il permettra, aussi, de mettre en place les
notions de programmation objet avancée. Cette prise en main se fera
par l’intermédiaire d’un projet : création d’une application de chat
client/serveur .
Objectif :
- donner aux utilisateurs la possibilité de choisir un client et de lui
envoyer un message privé qui sera visible que pour lui ou bien de
communiquer avec plusieurs contacts en même temps :
en créant un serveur de messagerie
en créant un client répondant au(x) protocole(s) du serveur.
Le serveur doit permettre à plusieurs clients de se connecter au serveur et
de discuter entre eux
5
B. Présentation du projet
L’environnement client/serveur ?
- L'environnement client/serveur désigne un mode de communication à
travers un réseau entre plusieurs programmes ou logiciels : l'un, qualifié
de client, envoie des requêtes ; l'autre ou les autres, qualifiés
de serveurs, attendent les requêtes des clients et y répondent.
Caractéristiques d'un processus serveur :
il attend une connexion entrante sur un ou plusieurs ports réseaux ; à la connexion d'un client sur le port en écoute, il ouvre un socket local
au système d'exploitation;
suite à la connexion, le processus serveur communique avec le client suivant le protocole prévu par la couche application du modèle OSI.
Caractéristiques d'un processus client :
il établit la connexion au serveur à destination d'un ou plusieurs ports réseaux ;
lorsque la connexion est acceptée par le serveur, il communique comme le prévoit la couche applicative du modèle OSI.
Le client et le serveur doivent bien sûr utiliser le même protocole de
communication au niveau de la couche transport du modèle OSI. Un serveur
est généralement capable de servir plusieurs clients simultanément.
Application de chat avec socket en C++
A.U : 2011/2012
Génie Informatique [C++] Page 6
Les bibliothèques utilisés ?
On a utilisé plusieurs bibliothèques du Framework QT
la classe QObject
# Include <QObject>
La classe QObject est la classe de base de tous les objets Qt
QObject est au cœur de la Qt Object Model . L'élément central de ce
modèle est un mécanisme très puissant pour la communication sans
faille objet appelé signaux et les slots .
Vous pouvez connecter un signal à un slot avec connexion () et de
détruire la relation avec déconnecter (). Pour éviter les boucles sans
fin de notification, vous pouvez bloquer temporairement des signaux
avec blockSignals (). Le protégé fonctionsconnectNotify ()
et disconnectNotify () permettent de suivre les connexions.
Le module QtNetwork
# Include <QtNetwork>
Le module QtNetwork fournit des classes pour rendre la
programmation réseau simple et portable
7
Pour inclure les définitions des classes du module, utilisez la directive
suivante :
QTcpServer
# Include <QTcpServer>
C’est une Classe Reference de QtNetwork module.
La classe QTcpServer fournit un serveur basé sur TCP
QTcpSocket
#include <QTcpSocket>
C’est une Classe Reference de QtNetwork module.
La classe QTcpSocket fournit un socket TCP
QWidget
#include <QWidget>
C’est une classe reference de QtGui module herite de la classe QObjet
La classe QWidget est la classe de base de tous les objets d'interface
utilisateur
Le widget est l'atome de l'interface utilisateur: il reçoit les événements de la
souris, du clavier et d'autres du système de fenêtre, et peint une
représentation de lui-même sur l'écran.
QtGui
# Include <QtGui>
Le module QtGui s'étend de QtCore avec fonctionnalité de GUI
Application de chat avec socket en C++
A.U : 2011/2012
Génie Informatique [C++] Page 8
Les sockets ?
Les sockets sont des flux de données, permettant à des machines locales ou
distantes de communiquer entre elles via des protocoles.
Les différents protocoles sont TCP qui est un protocole dit "connecté", et
UDP qui est un protocole dit "non connecté".
Présentation du protocole TCP
Le protocole TCP est un protocole dit connecté. Il contrôle si le paquet est
arrivé à destination si ce n'est pas le cas il le renvoie.
9
Protocole UDP : A la différence de TCP, UDP est un protocole en mode non-connecté, il ne
vérifie pas si le paquet est arrivé à destination.
Coté client :
Dans cette partie nous allons nous placer côté client, c'est-à-dire que nous allons nous connecter à un serveur.
Création d’un socket :
Avant toute chose, il nous faut créer notre socket par la methode QTcpSocket sockclient
Connexion au serveur :
Maintenant nous allons nous connecter à notre serveur, en remplissant au préalable la structure contenant les informations du serveur (port et adresse IP ou nom d'hôte).
On utilise sockclient.about pour effacer tous les connexions et
sockclient.connectToHost pour se connecter à l’hote de n’importe qu’elle
adresse
Application de chat avec socket en C++
A.U : 2011/2012
Génie Informatique [C++] Page 10
Envoi et réception des données
Maintenant pour communiquer avec notre serveur (envoyer et recevoir des
données)
Envoi des données :
On commence par la declaration et initialisation des flux d’envoi par la
classe QByteArray et QDataStream
11
Reception des données
On commence par la declaration des flux entrant et intialisant l’adresse
socket de client
Fermeture de socket :
Et bien entendu on n'oublie pas de fermer notre socket
Voilà, vous savez comment vous connecter, envoyer et recevoir des données en C avec le protocole TCP. Maintenant voyons comment cela se passe du côté serveur.
Application de chat avec socket en C++
A.U : 2011/2012
Génie Informatique [C++] Page 12
Coté serveur :
Création du socket
La création du socket reste identique.
Initialisation du serveur
13
Ecoute et connexion des clients
Fermeture de sockets
Et bien entendu on n'oublie pas de fermer notre socket mais aussi ceux de
nos clients.
Application de chat avec socket en C++
A.U : 2011/2012
Génie Informatique [C++] Page 14
IV. Implémentation
Afin d’accomplir ce projet, on a envisagé la création de deux projet c++,
le premier concerne la création d’un serveur, le deuxième se charge de la
création d’une interface client qui aura comme bût l’interface homme
machine.
- En commence avec le premier projet, qui concerne le serveur :
a- Les fonctions Utilisés :
Le projet de serveur est constitué d’une classe serveur qui herite de la
classe public prédéfinie QWidget qui est considerée comme la classe de
base dans la creation des interfaces.
Dans cette classe on trouve :
Un constructeur serveur() qui a comme but de construire notre
objet serveur tous en initialisant les attributs, et realisant les
connexions voulu .
nouveauclient() ;
cette fonction permet de stocker la socket du nouveau client dans
le tableau des clients
Une procedure void reponse(const QString &message) qui se
charge de répondre au demande des clients (pour bien expliquer
le code est commenté). Pour notre cas cette procedure envoi les
messages envoiyer par les utilisateur, a leur destinataires
void envoyeratous(const QString &message, const QString
&pseu,QList<QString > Lpseu);
15
cette procedure envoi le paquet des données a tous les utilisateurs
sans exception
void ajouterclient(QList<QString> lisp);
cette procedur permet d’envoyer la nouvelle liste des utilisateurs
connectés a tous le monde
void envoyeraclient(QString &des,const QString &message, const
QString &pseu,QList<QString > Lpseu);
cette procedure aura le role d'envoyer le flus a un destinataire
precie et pas a tous les utilisateurs connecter
clientdeconnecter() ;
cette procedure enleve le client deconnecter de la liste des client
connecter
- Le deuxiéme Projet : client
Le projet de client est constituer d’une classe interclient qui herite
de la classe public QWidget et la classe private Ui de la classe
interface2
Dans cette classe on trouve plusieurs fonction :
interclient();
Un constructeur interclient pour construire l’objet client , en
initialisant tous les attributs
Void on_envoyer_clicked() ;
Une fonction qui permet d’envoyer un message par un click ,
c’est un botton ‘ envoyer ‘
Void on_connexion_clicked() ;
Une fonction qui permet de se connecter , c’est un botton se
connecter pour la connexion d’un client et de chatter avec les
autres clients
Void recevoir() ;
Une fonction qui permet d’accueillir des messages recus
Void connecter() ;
Application de chat avec socket en C++
A.U : 2011/2012
Génie Informatique [C++] Page 16
C’est une fonction pour se connecter à l’application, une fois
quelqu’un se connecte un message s’affiche "vous êtes connecter
!!!"
Void deconnecter() ;
C’est une fonction pour se déconnecter de chat , et de fermeture
de l’application
Void on_deconnexion_clicked() ;
Une fonction qui génère la méthode déconnexion par un
Botton , un message s’affiche lorsqu’un client se déconnecte
"vous êtes déconnectez!!!"
Void envoyerpseud(QString &p) ;
Cette fonction permet d’envoyer un pseudo pour chat utilisateur
void recevoirpseudo() ;
permet de recevoir les pseudos des contacts connectés
void on_pushButton_2_clicked() ;
une fonction qui permet de choisir une police , en cliquant sur un
Botton pour la police que tu veut utiliser en chat avec tes contacts
void on_pushButton_3_clicked() ;
une fonction qui permet de choisir le couleur que tu veut, par
un Botton qui génère une palette des plusieurs couleurs de
l’écriture
void on_photo_2_clicked() ;
une fonction d’un botton qui permet de parcourir afin de
choisir le fichier que tu veut des images soit .png , .gif ,.jpg ,
.jpe
17
IV. Environnement de développement
La Réalisation de ce projet a fait appel à
l’utilisation d’ un framework d'applications
multiplateforme et d'interface homme machine
(IHM
Qt Creator est un environnement de
développement pour Qt, est un logiciel qui
fournit certaines fonctionnalités nécessaires
aux développeurs d'applications pour
programmer correctement et efficacement.
Avec Qt, on peut écrire des applications une fois et les déployer ensuite sur
de nombreux systèmes d'exploitation de bureau et embarqués sans avoir à
réécrire le code source.
Qt offre aussi toute les fonctionnalités nécessaires pour développer des
applications à interface graphique avancée pour plates-formes de bureau et
embarquées. Qt utilise les interfaces de programmation de graphiques
natives de chaque plate-forme prise en charge, afin de tirer pleinement
parti des ressources du système et pour que les applications possèdent une
apparence et un ressenti natifs.
Ensemble complet de composants d'interface graphique (widgets), des
boutons et boîtes de dialogue aux arborescences, sans oublier les tables
Moteur de mise en page sensible à la police de caractères, à la langue et à
l'orientation de l'écran, avec mise à l'échelle automatique
Prise en charge de l'anticrénelage, de la déformation vectorielle et du
format Scalable Vector Graphics (SVG)
Personnalisation complète de l'interface utilisateur possible, à l'aide
d'une API de stylisation et de feuilles de style widgets
Application de chat avec socket en C++
A.U : 2011/2012
Génie Informatique [C++] Page 18
Prise en charge de l'accélération matérielle graphique et de plusieurs
affichages sur les systèmes embarqués
Qt offre la fonctionnalité nécessaire pour une programmation de réseau
aisée et multiplate-forme.
Abstraction complète du socket de client/serveur
Prise en charge de HTTP, FTP, DNS et HTTP 1.1 asynchrone
Accédez à tous les types de données, de HTML et XML aux images et aux
fichiers multimédias
Une gestion basique des projets
Utilisant le système qmake, Qt Creator utilise les fichiers .pro pour
représenter un projet en cours de développement, permettant ainsi de
passer de manière transparente d'un développement avec Qt Creator ou
utilisant des outils plus spécialisés pour développer : dans les deux cas, le
.pro reste le même.
19
V. Réalisation et mise en œuvre
Dans cette section, On va présenter aperçu des écrans de notre application.
Débutant par la premiere etape : la connexion
Pour communiquer avec les contacts , on doit se connecter d’abord
Avant de connecter
Application de chat avec socket en C++
A.U : 2011/2012
Génie Informatique [C++] Page 20
Après connexion
Application de chat avec socket en C++
A.U : 2011/2012
Génie Informatique [C++] Page 22
VI. Conclusion
Durant ce projet, notre mission consistait à créer une application de chat
client /serveur pour qu’un utilisateur peut se connecter et de se
déconnecter avec plusieurs contacts par un serveur en utilisant les sockets
en C++.
Au cours de la période, on a eu l’opportunité de mettre en évidence les
différentes connaissances acquises et d’acquérir de nouveaux concepts
savoir QT . De plus, on a eu l’occasion d’appliquer nos connaissances en
C++, et les principes du système client/serveur en réseau, ainsi que les
principaux rôles des sockets dans une applications client/serveur .
La partie que nous avons développée correspond aux objectifs de départ,
Mais ceci n’empêche pas d’améliorer l’application au futur.