Serveur chat complet (+ client) avec protocole

Soyez le premier à donner votre avis sur cette source.

Vue 5 272 fois - Téléchargée 1 194 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

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

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
10
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

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.