Professional Documents
Culture Documents
rseau en Java de A Z
par PLU Julien (http://jplu.developpez.com) (Blog)
Date de publication : 09 juin 2010
Dernire mise jour :
Nous allons ici voir un article sur le dveloppement de chaque tape d'un systme de
tchat client/serveur, c'est--dire cahier des charges, protocole, tude, conception et enfin
dveloppement. Nous baptiserons le protocole de cette application PCU (Protocole de Chat
Universitaire). Nous allons d'abord faire un programme de base et ensuite lui apporter des
amliorations petit petit. Commentez cet article :
Dvelopper une application rseau en Java de A Z par PLU Julien (http://jplu.developpez.com) (Blog)
-2Copyright 2010 - PLU Julien. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes,
documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E
de dommages et intrts.
http://jplu.developpez.com/tutoriels/java/pcu/
Dvelopper une application rseau en Java de A Z par PLU Julien (http://jplu.developpez.com) (Blog)
I-A-5 - Protocole
Nous allons mettre en place un protocole pur texte avec l'encodage UTF-8.
I-A-6 - Scurit
Chaque utilisateur doit tre authentifi (login/password) pour pouvoir accder aux fonctionnalits du serveur. Pour
l'authentification, une base de donnes stockera les identifiants et les mots de passe de chaque utilisateur.
L'inscription se fera sur un site web (partie que nous ne verrons pas dans cet article ou bien alors bien plus tard).
comptes modrateurs ;
la connexion client/serveur est chiffre l'aide de SSL/TLS ;
-3Copyright 2010 - PLU Julien. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes,
documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E
de dommages et intrts.
http://jplu.developpez.com/tutoriels/java/pcu/
Dvelopper une application rseau en Java de A Z par PLU Julien (http://jplu.developpez.com) (Blog)
moticnes ;
coloration syntaxique ;
ajout d'un bot ;
canaux de quizz ;
ajout de module par scripting ;
gestion des status.
II - Protocole
Nous allons ici dtailler le protocole utilis.
II-A - Introduction
On appelle serveur l'hte fournissant le service, et client l'hte l'utilisant. Le Protocole PCU fournit un service de
discussion instantane et de mise en relation entre clients, construit sur le protocole TCP/IP, il est volontairement
crit entirement en franais. Il s'organise autour de deux fonctionnalits principales :
Un canal est un groupe nomm d'un ou plusieurs clients qui recevront tous les messages adresss ce canal. On
appelle connexion directe une connexion entre deux clients ne passant pas par le serveur.
II-B - Spcifications
II-B-1 - Gnralits
Pour tre indpendant de tout langage, PCU est un protocole pur texte, et afin d'tre compatible avec la majeure
partie des caractres existant l'encodage utilis est UTF-8.
II-B-2 - Messages
Les messages changs utilisent :
Les rponses du serveur doivent permettre au client de savoir quel message il rpond. Si un client fait une demande
du nombre de connects, des rponses simples comme +OK_REQUETE ou -ERR_ERREUR seront renvoyes par
le serveur.
II-B-3 - Conventions
Le nom des commandes est volontairement long de faon tre le plus explicite possible. Le format des commandes
est dfini ci-dessous.
Convention des rponses :
+ prfixe une rponse n'tant pas une erreur et est suivi de :
Dvelopper une application rseau en Java de A Z par PLU Julien (http://jplu.developpez.com) (Blog)
)
SUCCES ::= (OK|KO)_<COMMANDE>
ERREUR ::= chane alphabtique en majuscules, sans espaces, prfixe par ERR_
TEXTE ::= chane alphabtique
II-C - Etats
II-C-1 - Non authentifi
Etat de la connexion client/serveur avant la russite de l'authentification du client.
II-C-2 - Authentifi
Etat de la connexion aprs la russite de l'authentification.
II-D - Messages
Si un client envoie un message incorrect, c'est--dire que les arguments ne correspondent pas la commande, le
serveur lui rpond par -ERR_SYNTAXE. Si la commande est inconnue: -ERR_CMDINCONNUE. Si la commande ne
peut tre invoque avec l'tat courant du client : -ERR_ETAT.
-5Copyright 2010 - PLU Julien. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes,
documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E
de dommages et intrts.
http://jplu.developpez.com/tutoriels/java/pcu/
Dvelopper une application rseau en Java de A Z par PLU Julien (http://jplu.developpez.com) (Blog)
II-D-1-b - QUITTER
Synopsis :
QUITTER [<message de dpart>]
Contraintes :
Ce message ne peut tre mis que dans un tat Authentifi.
Description :
Commande utilise par le client pour fermer la connexion.
Rponses possibles :
Aucune
II-D-1-c - FINCONNEXION
Synopsis :
FINCONNEXION ["<message de dpart>"]
Contraintes :
Message envoy par le serveur pour prvenir le client de la fin de la connexion lorsque le serveur est
stopp ou relanc, lorsque le nombre maximum de connexions est atteint et enfin lorsq'un client est
banni. Il est possible de prciser un message de fin.
Rponses possibles :
Aucune
Dvelopper une application rseau en Java de A Z par PLU Julien (http://jplu.developpez.com) (Blog)
Description :
Commande utilise pour rejoindre un canal.
Rponses possibles :
Le canal a bien t rejoint :
+OK_REJOINDRE <nom-canal>
Le client est dj connect :
-ERR_DEJACONNECTE <nom-canal>
Le canal n'existe pas :
-ERR_CANALINTROUVABLE <nom-canal>
II-D-2-b - MESSAGE
Synopsis :
MESSAGE <nom-canal> <texte>
Contraintes :
Ce message ne peut tre mis que dans un tat Authentifi et Connect un canal.
Description :
Commande utilise pour envoyer un message sur un canal.
Rponses possibles :
Le message a bien t envoy :
+OK_MESSAGE <nom-canal>
L'utilisateur n'est pas connect au canal prcis :
-ERR_NONCONNECTE <nom-canal>
Le canal n'existe pas :
-ERR_CANALINTROUVABLE <nom-canal>
II-D-2-c - MEMBRE
Synopsis :
MEMBRE <nom-canal>
Contraintes :
Ce message ne peut tre mis que dans un tat Authentifi.
Description :
Commande utilise pour connatre la liste des connects au canal.
Rponses possibles :
Les utilisateurs ont t trouvs :
+OK_MEMBRE <nom-canal><CR><login1 login2 ... loginN>
Le canal n'existe pas :
-ERR_CANALINTROUVABLE <nom-canal>
II-D-2-d - QUITTERCANAL
Synopsis :
QUITTERCANAL <nom-canal>
Contraintes :
Ce message ne peut tre mis que dans un tat Authentifi et Connect un canal.
Description :
Commande utilise pour quitter un canal.
Rponses possibles :
La dconnexion au canal s'est bien passe :
-7Copyright 2010 - PLU Julien. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes,
documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E
de dommages et intrts.
http://jplu.developpez.com/tutoriels/java/pcu/
Dvelopper une application rseau en Java de A Z par PLU Julien (http://jplu.developpez.com) (Blog)
+OK_QUITTERCANAL <nom-canal>
L'utilisateur n'est pas connect au canal prcis :
-ERR_NONCONNECTE <nom-canal>
Le canal n'exsite pas :
-ERR_CANALINTROUVABLE <nom-canal>
II-D-2-e - NOTIFIER
Synopsis :
NOTIFIER <nom-canal> <evenement> ([<login>] | [<login>] ["<texte>"] | ["<texte>"])
Contraintes :
Aucunes, ce message est envoy par le serveur.
Description :
Ce message est envoy par le serveur aux clients connects un canal pour les notifier d'un
vnement affectant le canal.
Il y a six vnements possibles :
REJOINT <login>
PARLE <login> "<texte>"
PARTI <login>
EJECTE <login>
SUJETCHANGE "<texte>"
SUPPRIME
BANNI <login>
A passe par le serveur pour demander une connexion directe B: CONNEXIONDIRECTE login-B IP-A.
Le serveur transmet le message B en substituant son login par celui de A. B reoit : CONNEXIONDIRECTE
login-A ip-A.
B se prpare accueillir une connexion sur un port de son choix et envoie au serveur :
+OK_CONNEXIONDIRECTE IP-B port-B qui le transmet tel quel A et passe alors dans l'tat connexion
directe.
A se connecte IP-B:port-B et passe alors dans l'tat connexion directe. Cette squence peut chouer
l'tape 1 si le login n'est pas reconnu, le serveur rpond alors -ERR_LOGININTROUVABLE login-A. B peut
galement refuser la connexion directe, il rpond alors +KO_CONNEXIONDIRECTE login-A.
Rponses possibles de la part du serveur :
Le login est introuvable :
-ERR_LOGININTROUVABLE <login>
Rponses possibles de la part de B :
-8Copyright 2010 - PLU Julien. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes,
documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E
de dommages et intrts.
http://jplu.developpez.com/tutoriels/java/pcu/
Dvelopper une application rseau en Java de A Z par PLU Julien (http://jplu.developpez.com) (Blog)
II-D-3-b - MESSAGEPRIVE
Synopsis :
MESSAGEPRIVE <texte>
Contraintes :
Ce message ne peut tre mis que dans un tat Connexion directe.
Description :
Commande utilise dans le cadre d'une connexion client/client pour envoyer un message.
II-D-3-c - TRANSFERTFICHIER
Synopsis :
TRANSFERTFICHIER <nom-fichier>
Contraintes :
Ce message ne peut tre mis que dans un tat Connexion directe.
Description :
Cette commande est utilise pour demander un transfert de fichier. Le client qui propose le transfert
prcise le nom du fichier. Le receveur lui, prcise le port sur lequel il attend la connexion si le transfert
est accept.
Rponses possibles :
Transfert accept :
+OK_TRANSFERTFICHIER <port>
Transfert refus :
+KO_TRANFERTFICHIER
II-D-4 - Informations
II-D-4-a - LISTER
Synopsis :
LISTER [<nom-canal>]
Contraintes :
Ce message ne peut tre mis que dans un tat Authentifi.
Description :
Commande utilise pour connatre la liste des canaux du serveur. Le serveur rpond par une liste de
tripls <nom-canal> <topic> <nombre d'utilisateurs> spars par CR. Si le nom d'un canal est prcis
celle-ci ne s'effectue que sur ce dernier c'est--dire que le serveur rpond par le tripl <nom-canal>
<topic> <nombre d'utilisateurs>
Rponses possibles :
La liste a t trouve :
+OK_LISTER<CR>triplet1<CR>triplet2<CR>...<CR>tripletN
Si le nom du canal a t prcis et que celui-ci n'existe pas :
-ERR_CANALINTROUVABLE <nom-canal>
-9Copyright 2010 - PLU Julien. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes,
documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E
de dommages et intrts.
http://jplu.developpez.com/tutoriels/java/pcu/
Dvelopper une application rseau en Java de A Z par PLU Julien (http://jplu.developpez.com) (Blog)
II-D-4-b - INFOMEMBRE
Synopsis :
INFOMEMBRE <login>
Contraintes :
Ce message ne peut tre mis que dans un tat Authentifi.
Description :
Commande utilise pour connatre les informations relatives un utilisateur.
Rponses possibles :
L'utilisateur a t trouv :
+OK_INFOMEMBRE <login><CR>nom-canal1 ... nom-canalN
L'utilisateur n'a pas t trouv :
-ERR_LOGININTROUVABLE <login>
II-D-4-c - MOTD
Synopsis :
MOTD
Contraintes :
Aucunes.
Description :
Commande utilise pour connatre le MOTD (Message Of The Day) du serveur.
Rponses possibles :
Le message est trouv :
+OK_MOTD "<motd>"
Une erreur interne est survenue :
-ERR_INTERNE
II-D-5 - Administration
Ces commandes sont rserves l'administrateur. Tout utilisateur non privilgi qui tenterait d'utiliser ces commandes
reoit le message d'erreur -ERR_NONADMINISTRATEUR.
II-D-5-a - CNL_CREER
Synopsis :
CNL_CREER <nom-canal> "<sujet-canal>"
Contraintes :
Ce message ne peut tre mis que dans un tat Authentifi.
Description :
Cration d'un canal.
Rponses possibles :
Le canal a bien t cr :
+OK_CNL_CREER <nom-canal> "<sujet-canal>"
Le canal existe dj :
-ERR_CANALEXISTANT <nom-canal>
Trop de canaux ont dj t crs :
-ERR_NBCANAUXMAX
- 10 Copyright 2010 - PLU Julien. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes,
documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E
de dommages et intrts.
http://jplu.developpez.com/tutoriels/java/pcu/
Dvelopper une application rseau en Java de A Z par PLU Julien (http://jplu.developpez.com) (Blog)
II-D-5-b - CNL_SUPPRIMER
Synopsis :
CNL_SUPPRIMER <nom-canal>
Contraintes :
Ce message ne peut tre mis que dans un tat Authentifi.
Description :
Suppression d'un canal.
Rponses possibles :
Le canal a bien t supprim :
+OK_CNL_SUPPRIMER <nom-canal>
Le canal pass en argument n'existe pas :
-ERR_CANALINTROUVABLE <nom-canal>
II-D-5-c - CNL_CHANGERSUJET
Synopsis :
CNL_CHANGERSUJET <nom-canal> "<nouveau-sujet>"
Contraintes :
Ce message ne peut tre mis que dans un tat Authentifi.
Description :
Commande utilise pour changer le sujet d'un canal.
Rponses possibles :
Le sujet du canal a bien t chang :
+OK_CNL_CHANGERSUJET <nom-canal> "<nouveau-sujet>"
Le canal pass en argument n'existe pas :
-ERR_CANALINTROUVABLE <nom-canal>
Le sujet n'est pas valide :
-ERR_SUJETINCORRECT "<nouveau sujet>"
II-D-5-d - UTL_EJECTER
Synopsis :
UTL_EJECTER <login> <nom-canal>
Contraintes :
Ce message ne peut tre mis que dans un tat Authentifi.
Description :
Commande utilise pour jecter un utilisateur d'un canal.
Rponses possibles :
L'utilisateur a t ject :
+OK_UTL_EJECTER <login> <nom-canal>
L'utilisateur n'a pas t trouv sur le serveur :
-ERR_LOGININTROUVABLE <login>
L'utilisateur n'est pas connect au canal :
-ERR_NONCONNECTE <login> <nom-canal>
Le canal n'existe pas :
-ERR_CANALINTROUVABLE <nom-canal>
- 11 Copyright 2010 - PLU Julien. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes,
documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E
de dommages et intrts.
http://jplu.developpez.com/tutoriels/java/pcu/
Dvelopper une application rseau en Java de A Z par PLU Julien (http://jplu.developpez.com) (Blog)
II-D-5-e - UTL_BANNIR
Synopsis :
UTL_BANNIR <login>
Contraintes :
Ce message ne peut tre mis que dans un tat Authentifi.
Description :
Commande utilise pour bannir un utilisateur du serveur.
Rponses possibles :
L'utilisateur a t banni :
+OK_UTL_BANNIR <login>
L'utilisateur n'a pas t trouv sur le serveur :
-ERR_LOGININTROUVABLE <login>
II-D-5-f - SRV_RELANCER
Synopsis :
SRV_RELANCER [<message>]
Contraintes :
Ce message ne peut tre mis que dans un tat Authentifi.
Description :
Relance le serveur. Il est possible de prciser un message de notification l'attention des clients.
Rponses possibles :
Le serveur va se relancer :
FINCONNEXION [<message>]
II-D-5-g - SRV_STOPPER
Synopsis :
SRV_STOPPER [<message>]
Contraintes :
Ce message ne peut tre mis que dans un tat Authentifi.
Description :
Arrte le serveur. Il est possible de prciser un message de notification l'attention des clients.
Rponses possibles :
Le serveur va s'arrter :
FINCONNEXION [<message>]
II-D-5-h - SRV_LISTER
Synopsis :
SRV_LISTER
Contraintes :
Ce message ne peut tre mis que dans un tat Authentifi.
Description :
Liste toutes les connexions du serveur. Le serveur rpond par une liste de couple <login> <IP> spars
par des CR.
Rponses possibles :
La liste a t trouve :
- 12 Copyright 2010 - PLU Julien. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes,
documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E
de dommages et intrts.
http://jplu.developpez.com/tutoriels/java/pcu/
Dvelopper une application rseau en Java de A Z par PLU Julien (http://jplu.developpez.com) (Blog)
+OK_SRV_LISTER <CR>liste-connexion
III - Spcifications
III-A - Mode d'administration
Le serveur se lance en 'daemon', sans interface. L'administrateur se connecte avec un client, et le serveur lui donne
les droits d'administration lors de l'authentification.
III-B - Serveur.conf
Ce fichier cod entirement en UTF-8 contient les paramtres de configuration du serveur. Son format est trs simple :
PROPRIETE1=VALEUR<CRLF>
PROPRIETE2="TEXTE"<CRLF>
PROPRIETE3="TEXTE \\
SUITE TEXTE %d %ip %nc %nu"
...
PROPRIETEN=VALEUR<CRLF>
Si le premier caractre non-blanc (c'est--dire diffrent de SP, HT ...) est #, la suite de la ligne est un commentaire,
ignore lors de la lecture du fichier. Seul le MOTD peut tre sur plusieurs lignes condition qu'une ligne se termine
par \\. Le MOTD peut aussi tre format par les format suivants :
%d : date du jour ;
%ip : adresse IP du serveur ;
%nu : nombre de clients connects ;
%nc : nombre de canaux crs.
PORT_ECOUTE
CONNEXION_MAX
CANAUX_MAX
MOTD
MSG_CONNEXION_MAX
MSG_UTL_BANNI
SERVEUR_BDD
PORT_SERVEUR_BDD
NOM_BDD
USER_BDD
MDP_BDD
- 13 Copyright 2010 - PLU Julien. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes,
documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E
de dommages et intrts.
http://jplu.developpez.com/tutoriels/java/pcu/
Dvelopper une application rseau en Java de A Z par PLU Julien (http://jplu.developpez.com) (Blog)
IV - Conception
Voici le diagramme UML de l'application telle que je l'ai conue. Cette faon n'est sans doute pas la meilleure mais
elle fonctionne bien. Si jamais vous avez une meilleure conception, n'hsitez pas m'en faire part.
V - Annexe
Vous pourrez retrouver l'avancement du projet PCU cette adresse Donc si vous dsirez apporter des ides,
rapporter des bogues si vous l'avez test ou tout autre type de remarque n'hsitez surtout pas les faire sur le site
du projet indiqu ci-dessus.
- 14 Copyright 2010 - PLU Julien. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes,
documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E
de dommages et intrts.
http://jplu.developpez.com/tutoriels/java/pcu/
Dvelopper une application rseau en Java de A Z par PLU Julien (http://jplu.developpez.com) (Blog)
VI - Remerciements
Merci Ricky81 ainsi qu' Baptiste Wicht pour leur aide la rdaction de cet article. Et merci Benj. pour sa
relecture et correction orthographique.
- 15 Copyright 2010 - PLU Julien. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes,
documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E
de dommages et intrts.
http://jplu.developpez.com/tutoriels/java/pcu/