23
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

Rapport application chat

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

21

Entrain de chatter :

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.