IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

avec Java Discussion :

Chat, gestion des threads


Sujet :

avec Java

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 39
    Par défaut Chat, gestion des threads
    Bonjour à tous et à toutes.

    Je suis en train de réaliser un Chat en Java, et j'ai pas mal avancé.
    J'ai réaliser une classe Serveur, une classe Thread Serveur, et une classe client.

    Les clients envoient un message au serveur qui l'envoie ensuite vers tous les autres client.

    Jusque la tout va bien.

    Mon problème est que je ne sais pas comment, au niveau client, faire pour que le client reçoive le message des autres clients, via le serveur donc, et que, dans un même temps, il puisse taper un message.

    En effet, lorsque le client doit taper son message, le programme est bloqué de son coté ( in.readline() ), et la lecture de l'envoie du serveur ne peux donc pas se faire, ce qui fais que le client reçoit le message des autres uniquement après la saisie de son message.

    Merci d'avance.

    PS: Chat en mode console pour le moment.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Salut,
    Il faut avoir plusieurs threads du côté client :
    • un qui attend la frappe de l'utilisateur
    • un qui affiche les messages recus du server

    Bonne continuation
    Tschau

  3. #3
    Membre Expert
    Avatar de CheryBen
    Inscrit en
    Mai 2005
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 599
    Par défaut
    Il ne faudra pas oublier de séparer également l'envoi du message de son écriture, sinon on ne pourra pas écrire un message tant que l'autre n'a pas été envoyé.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 39
    Par défaut
    C'est logique.
    J'ai compris mon erreur, merci beaucoup a vous deux.
    Je m'y remet
    A+

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 39
    Par défaut
    Re à tous.

    Je viens de rentrer du boulot et j'ai fais ce que vous m'avez conseillé.

    J'ai crée une classe ReceptionThread qui réceptionne les messages du serveurs et affiche. Elle étend la classe Thread donc.

    Dans mon main, je créer le thread, en lui passant la socket en paramètre, et, j'ai mon fameux in.readline() puis envoie au serveur.

    Le problème est que mon thread de réception se lance bien, mais qu'il ne rends pas la main au main puisqu'il attends des données du serveur ( in.readObject() ).

    Je ne sais pas comment faire pour que ce thread attende des données, main qu'il ne bloque pas mon main thread.

    J'espère avoir été limpide.

  6. #6
    Invité
    Invité(e)
    Par défaut
    S'il ne rend pas la main, c'est que tu as dû le lancer dans le même thread ou que tu l'attends. On peut voir ton code s'il te plait ?

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 39
    Par défaut
    Désolé de répondre si tard.

    J'ai résolu le problème, il s'agissait d'un problème à la création de mon objet ServeurThread, il se bloquait sur la création du flux in (ObjectStream), et donc ne rendait pas la main au thread.

    Le chat bien que primitif fonctionne.

    Je pense mettre la source de mon code pour que vous puissiez me donner des conseils pour l'améliorer, mais je ne sais pas si c'est la bonne section ?

    Aprés une réponse d'un modo je mettrai en RESOLU si ce n'est pas la bonne section.

    Si on me permet de laisser le sujet ouvert je posterai mes sources ici.

    Merci a tous.

  8. #8
    Membre Expert
    Avatar de CheryBen
    Inscrit en
    Mai 2005
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 599
    Par défaut
    Tu peux bien sûr poster ton code si tu souhaites avoir des remarques, aussi bien positive que négatives, mais constructives

    Si c'est trop long, je te suggère de ne mettre qu'un extrait ou 2-3 classes.
    Tu peux toujours mettre les fichiers en pièce jointe mais plus c'est long, plus cela va dissuader les gens de tout relire.

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 39
    Par défaut
    Très bien, j'épure un peu mon code et je le posterai surement demain.

  10. #10
    Membre averti
    Inscrit en
    Novembre 2007
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 50
    Par défaut
    Bonjour,

    J'ai eu un projet de chat en java quand j'étais étudiant. Le cours portait sur les colecticiel (Groupware logiciel a plusieurs)...

    Et on a pas utilisé les Thread par contre on est passé par du Java RMI...
    Avec des stub et autres. (Les thread etaient transparent car gérer par RMI)
    Il y a un composant serveur et des clients.....Cela marchais bien sur le composant serveur on pouvait même mettre une fenêtre qui monitorais le tout...

    As tu regardé de ce Coté??? Car ce lancer dans la gestion des thread sur un logiciel de chat java je suis pas sur que cela soit tres cool a implémenter.

  11. #11
    Membre averti
    Inscrit en
    Novembre 2007
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 50
    Par défaut
    Citation Envoyé par George7 Voir le message
    Salut,
    Il faut avoir plusieurs threads du côté client :
    • un qui attend la frappe de l'utilisateur
    • un qui affiche les messages recus du server

    Bonne continuation
    Tschau
    Tu peut faire autrement Lors de chaque réception de messages tu renvoie a ta liste de clients coter serveur sous l'émetteur cette liste de client etant tenu a jour par un autre process.
    Cela marche bien mais dans une archi RMI avec des tread??? Je sais pas si c'est simple a faire...

  12. #12
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    52
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 52
    Par défaut
    Si tu as du temps, regarde du coté de l'API JAVA NIO.
    Cela permettra de concevoir un serveur de chat qui résiste à un nombre très important d'utilisateur.

Discussions similaires

  1. gestion des threads
    Par yanis97 dans le forum Langage
    Réponses: 6
    Dernier message: 20/04/2006, 12h41
  2. Gestion des Threads
    Par Nalfouille dans le forum MFC
    Réponses: 3
    Dernier message: 05/04/2006, 16h29
  3. Gestion des threads
    Par yanis97 dans le forum C++
    Réponses: 6
    Dernier message: 08/03/2006, 09h39
  4. GEstion des thread
    Par Julien Dufour dans le forum Access
    Réponses: 8
    Dernier message: 06/10/2004, 14h28
  5. [reseaux] Gestion des threads en perl
    Par totox17 dans le forum Programmation et administration système
    Réponses: 2
    Dernier message: 28/11/2002, 09h40

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo