Serveur chat complet (+ client) avec protocole

Soyez le premier à donner votre avis sur cette source.

Vue 5 537 fois - Téléchargée 1 269 fois

Description

Un énième CHAT mais cette fois, le serveur est assez complet et reconnais un vrai protocole de connexion et de communication. Possibilité donc de se connecter avec un simple telnet sous DOS ! Le client est un peu rudimentaire et pas très jolie mais l'améliorer serait un jeu d'enfants.
Evidemment cela fonctionne aussi bien sur un réseau local que sur n'importe quel ordinateur connecté à Internet.
Ce programme était un de mes projets d'examens BAC+2.

Source / Exemple :


Tout est dans le zip !

Conclusion :


La connaissane appartient à tous !

Codes Sources

A voir également

Ajouter un commentaire Commentaires
rtjhlk Messages postés 43 Date d'inscription jeudi 26 février 2009 Statut Membre Dernière intervention 28 août 2009
29 juin 2009 à 16:47
BONJOUR
J'ai le probleme suivant:

I. X veut écrire à Y@BINI
II. X contacte son propre serveur d'envoi POU
III. POU trouve l'adresse du serveur BINIOU et lui demande un puzzle
IV. BINI fournit un puzzle
V. POU transmet ce puzzle à X
VI. X résout le puzzle et envoie la solution à POU
VII. POU envoie le mail de X et la solution du puzzle à BINI
VIII. BINI vérifie la solution et, si elle est correcte, stocke le message pour que Z puisse le lire (par exemple sur un serveur mail classique)

Voici un squelette pour la partie concernant les puzzle :

public class Puzzle{
private static final SIZE = ...;
private final byte[] puzzle;
public Puzzle(int difficulty){
// ce constructeur doit en principe générer le puzzle en fonction de
// la difficulté (taille du mail par exemple)
// mais on simplifie par :
puzzle = new byte[SIZE];
}
public byte[] getByte(){
return puzzle;
}
@Override
public boolean equals(Object o){
if(o instanceof Puzzle){
Puzzle p = (Puzzle)o;
return Arrays.equals(p.getByte(), puzzle);
}
return false;
}
}

Dans votre serveur :

public void sendPuzzle(Puzzle p,Socket service)throws IOException{
service.getOutputStream().write(p.getByte());
}
public boolean isCorrect(Puzzle p, Puzzle answer){
// en principe cette méthode doit vérifier que answer
// contient bien les mêmes pieces que p et qu'elles sont
// bien ordonnées pour respecter les règles eternity.
// on simplifie par :
return p.equals(answer);
}

dans votre client :

public void sendAnswer(Puzzle p, Socket server){
// en principe, le client doit résoudre le puzzle,
// on simplifie par :
server.getOutputStream().write(p.getByte());
}
j'ai compris le principe mais j'ai quelque difficulté pour coder.
merci
rtjhlk Messages postés 43 Date d'inscription jeudi 26 février 2009 Statut Membre Dernière intervention 28 août 2009
29 juin 2009 à 16:29
Bonjour
j'ai le probleme suivant à resoudre
I. X veut écrire à Y@BINI
II. X contacte son propre serveur d'envoi POU
III. POU trouve l'adresse du serveur BINI et lui demande un puzzle
IV. BINI fournit un puzzle
V. POU transmet ce puzzle à X
VI. X résout le puzzle et envoie la solution à POU
VII. POU envoie le mail de X et la solution du puzzle à BINI
VIII. BINI vérifie la solution et, si elle est correcte, stocke le message pour que Z puisse le lire (par exemple sur un serveur mail classique)

Voici un squelette pour la partie concernant les puzzle :

public class Puzzle{
private static final SIZE = ...;
private final byte[] puzzle;
public Puzzle(int difficulty){
// ce constructeur doit en principe générer le puzzle en fonction de
// la difficulté (taille du mail par exemple)
// mais on simplifie par :
puzzle = new byte[SIZE];
}
public byte[] getByte(){
return puzzle;
}
@Override
public boolean equals(Object o){
if(o instanceof Puzzle){
Puzzle p = (Puzzle)o;
return Arrays.equals(p.getByte(), puzzle);
}
return false;
}
}

Dans votre serveur :

public void sendPuzzle(Puzzle p,Socket service)throws IOException{
service.getOutputStream().write(p.getByte());
}
public boolean isCorrect(Puzzle p, Puzzle answer){
// en principe cette méthode doit vérifier que answer
// contient bien les mêmes pieces que p et qu'elles sont
// bien ordonnées pour respecter les règles eternity.
// on simplifie par :
return p.equals(answer);
}

dans votre client :

public void sendAnswer(Puzzle p, Socket server){
// en principe, le client doit résoudre le puzzle,
// on simplifie par :
server.getOutputStream().write(p.getByte());
}

en fait j'ai compris le principe mais j'ai des soucis pour coder pour cela je vous demande de l'aide s'il vous plait .
merci
cs_neodante Messages postés 2835 Date d'inscription lundi 11 août 2003 Statut Modérateur Dernière intervention 16 décembre 2006 11
7 nov. 2003 à 18:09
Tu veux dire pour s'enregistrer sur le serveur surement !
Soit l'administrateur met le nom et le mot de passe dans le fichier prévut à cette effet, soit un nouveau client via un Telnet peut faire :
<NEW USER> pseudo mot_de_passe
pour s'enregistrer !
Peut-être que j'ai oublié de mettre cela dans le client graphique, mais je n'ai pas porté mon attention toute particulière sur le client graphique car si tu suis le protocole de connexion (qui est dans le répertoire misc du projet) n'importe qui peut réaliser un client entièrement compatible pour ce serveur !

Si t'as d'autres questions n'hésites pas !
@+
sweefty2 Messages postés 44 Date d'inscription samedi 30 novembre 2002 Statut Membre Dernière intervention 13 mars 2005
7 nov. 2003 à 17:25
ce serait cool de me dire comment t'as fait ton inscription merci j'ai pas trop callé

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.