Chat - serveur et client(applet) - assez simple

Soyez le premier à donner votre avis sur cette source.

Vue 50 988 fois - Téléchargée 41 311 fois

Description

Ce chat assez simple est destiné à ceux qui voudraient créer leur propre chat à partir d'un exemple.

Le serveur est composé de deux classes : Serveur.java et ServeurDialogue.java. Le client est une applet composée d'une seule classe : Client.java. Cette applet est contenue dans la page web index.html
Le client et le serveur communiquent directement par sockets. Pour voir plus précisemment le fonctionnement de ce chat, vous pouvez lire les commentaires présents dans les classes.

Pour tester ce chat chez vous en local :
- lancer le serveur à partir d'une fenêtre DOS ou équivalent, en lui précisant le numéro de port sur lequel les clients vont se connecter. Par exemple si on choisit le port 15000, taper: "java Serveur 15000"
- changer les paramètres du client dans la page index.html. Dans cette page on envoie les paramètres ipServeur et portServeur à l'applet (<param name="ipServeur" value="localhost"> et <param name="portServeur" value="15000">). Bien vérifier que ipServeur a pour valeur "localhost", et mettre comme valeur à portServeur le no de port qu'on a choisi pour le serveur, juste avant.
- ouvrir deux fois (ou plus) index.html avec un navigateur (ex: Internet Explorer), pour pouvoir simuler 2 personnes qui se parlent. Le navigateur doit être capable de lire les applets, avec au moins une version 1.2 de java je crois (car j'utilise des composants Swing)
- mettre un nom de login différent dans les 2 fenêtres, puis chatter...

Pour utiliser ce chat sur internet :
C'est plus compliqué, car le serveur de chat est un programme java, et peu d'hébergeurs accepteront de faire tourner votre programme java sur leurs machines (surtout pas les gratuits!). Donc si vous ne voulez pas dépenser d'argent, il faut héberger le serveur de chat sur votre propre ordinateur. Et du coup il faut également héberger le client de chat sur votre ordi, car pour une raison de sécurité les applets ne peuvent pas se connecter à un programme qui est sur une autre machine que leur hébergeur. Les étapes à faire sont donc :
- installer un serveur web quelconque sur votre ordinateur (ex : easyphp), dans lequel on mettra la page index.html et l'applet client.
- mettre l'adresse IP de votre ordinateur pour l'attribut ipServeur Dans la page index.html
- lancer le serveur de chat comme pour le test en local.
Les internautes pourront alors se connecter au chat en allant sur l'adresse http://votreAdresseIP:portDuServeurWeb/index.html . Dernière chose à savoir : il est probable que votre adresse ip soit différente à chaque fois que vous vous connectez à internet (cela dépend du fournisseur d'accès). Si c'est le cas il y a des sites qui proposent de vous donner une adresse permanente qui redirige vers votre adresse ip, en la mettant à jour dès qu'elle change (ex : http://60gp.ovh.net/~asipadan/ipdynamique/).

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

loscovic
Messages postés
7
Date d'inscription
vendredi 20 août 2004
Statut
Membre
Dernière intervention
28 avril 2008
-
bizarrrrrre! il ne marche pas ton truc!
il n'affiche rien du tout ou es ce ke je l'utilise mal
cyberdog94
Messages postés
6
Date d'inscription
vendredi 2 janvier 2004
Statut
Membre
Dernière intervention
30 mai 2005
-
Ton code est vraiment bien écrit je l'ai pas testé mais il résoud mon problème qui était de redistribuer un message à tous les clients. Je cherche cependant un moyen de réaliser le chat sans utiliser ta classe ServeurDialogue. Le problème consiste à donner le moyen à un thread d'invoquer directement les méthodes de son créateur (ie la classe Serveur). Mais j'avoue qu'après quelques heures sur google j'ai vite vu que c'était assez compliquer. Au point que certains codeurs utilisent la fonction de sérialisation de Java (transfert d'objets entre classes par fichiers !) mais je suis sûr qu'il y a un moyen plus propre, évitant cette méthode ou du moins l'instanciation de X servers pour X clients. Si quelqu'un connait le procédé, merci de le faire savoir.
cyberdog94
Messages postés
6
Date d'inscription
vendredi 2 janvier 2004
Statut
Membre
Dernière intervention
30 mai 2005
-
Added : je me réponds à moi même : en java il existe un moyen simple de communiquer entre threads :

PipedWriter out = new PipedWriter();
PipedReader in;
try {
in = new PipedReader(out);
} catch (IOException e) { ... }

Le principe consiste à créer un tube de de communication (attention il est unidirectionnel) entre les threads. De même qu'un client et un serveur communiquent par des tubes (local,lan ou internet) :

fromClient = new DataInputStream client.getInputStream());
toClient = new PrintStream(client.getOutputStream());

un thread enfant PEUT dialoguer avec son thread père voir même avec ses thread frères. Donc pour résoudre le problème évoqué dans mon précédant post il "suffit" de créer à chaque connexion entrante d'un client un thread pour traiter le client ET un 2 tubes (pipe) pour remonter/descendre les infos entre les threads traitant les clients et le thread du serveur.

Enfin une autre méthode basée sur le RMI (Remote Method Invocation) permet à un Objet distant (client) d'invoquer des méthodes appartenant à une Classe distante (Serveur). Mais cela entraîne des problèmes de sécurité qui n'ont pas lieu dans la première méthode par pipes (les infos circulent entre des threads tournant uniquement sur le serveur).

Bref j'espère que ce post en aidera plus d'un (ie moi) !

Bon code !
nicolbo
Messages postés
1
Date d'inscription
jeudi 29 avril 2004
Statut
Membre
Dernière intervention
23 avril 2005
-
Bonjour,

le code est très propre, en effet, mais j'ai le même problème que loscovic : impossible de le faire marcher. le bouton "envoyer" semble ne rien envoyer, et je n'arrive pas à corriger ce problème... Un coup de main est-il envisageable? ;)

merci !
paohlott
Messages postés
6
Date d'inscription
mercredi 9 avril 2003
Statut
Membre
Dernière intervention
24 mai 2005
-
Salut Nicolbo,

j'ai restesté mon code en le téléchargeant depuis ce site, et je n'ai eu aucun problème. Je t'ai laissé un message perso pour qu'on puisse voir ce qui se pase chez toi.

PA

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.