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

Entrée/Sortie Java Discussion :

Echanges d'information via socket


Sujet :

Entrée/Sortie Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Juillet 2006
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 70
    Par défaut Echanges d'information via socket
    Bonjour à tous,

    j'écris actuellement une application de chat dans le but de reprendre les bases du Java et d'améliorer mes connaissances (application didactique).

    Actuellement, je peux échanger du texte entre les différents clients connectés au serveur, celui-ci jouant le rôle de passerelle.

    Maintenant que j'ai une base fonctionnelle, j'aimerais ajouter quelques options à mes programmes client et serveur.

    Je voudrais, dans un premier temps, permettre au client de lister la liste des utilisateurs connectés. Pour ce faire j'aurais besoin de vos avis/conseils...

    Je pensais stocker les utilisateurs connectés soit en base de données (module BD qui serait complété par la suite) soit dans un tableau, soit dans un fichier,...

    Pour l'envoie du nom des utilisateurs connectés, je pensais envoyer un fichier XML, mais je doute que ce soit la meilleure façon de faire; je devrai prévoir un moyen de différencier les différents types d'informations (utilisateurs connectés, message à afficher, ainsi que les styles à utiliser pour les textes,...).

    Merci d'avance pour votre aide.

    auré

  2. #2
    Modérateur
    Avatar de nouknouk
    Homme Profil pro
    Inscrit en
    Décembre 2006
    Messages
    1 655
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 655
    Par défaut
    Citation Envoyé par aure298 Voir le message
    Je pensais stocker les utilisateurs connectés soit en base de données (module BD qui serait complété par la suite) soit dans un tableau, soit dans un fichier,...
    Il y a une différence entre stocker des informations persistantes (ie. qui restent entre deux exécutions de ton serveur) et des informations non persistantes (donc liées à l'exécution courante du serveur).

    Vu que tu veux la liste des utilisateurs connectés, j'en déduis que tu est plutôt dans le deuxième cas. Donc une structure de données adéquate dans ton programme serveur fera amplement l'affaire.

    Par exemple, j'imagine que tu as déjà une liste de références vers les sockets des connexions de tes clients (pour ré-émettre un message émis par un client à tous les autres utilisateurs connectés).

    Pourquoi ne pas réutiliser cette liste en l'associant à d'autres infos (pseudo, ...), avec une hashMap par exemple: en clef la référence de ta socket ; en valeur un String pour le pseudo ou n'importe quelle classe de ton crû qui renfermera totues les infos que tu désires.

    Pour l'envoie du nom des utilisateurs connectés, je pensais envoyer un fichier XML, mais je doute que ce soit la meilleure façon de faire
    Il te faut définir un formalisme pour envoyer différents types d'informations. En langage un peu 'pompeux' pour l'occasion, c'est n'est ni plus ni moins qu'un protocole.
    Après libre à toi de faire comme tu veux. Un exemple ultra basique:

    1/ Un message = une ligne de texte (ie. String terminé par un '\n')

    2/ Un message commence par un 'type de message' (USER_SAYS, USER_REQUEST_LIST_OF_USERS, SERVER_SENDS_LIST_OF_USER, ...) suivi du caractère 'deux points' suivi du contenu de la commande

    3/ Le contenu varie en fonction du type de message. Par exemple le contenu d'un message USER_SAYS est tout simplement une chaîne de caractères représentant ce que l'utilisateur a tapé au clavier ; le contenu d'un message SERVER_SENDS_LIST_OF_USER et une liste de pseudos séparés par des virgules, etc...

  3. #3
    Membre confirmé
    Inscrit en
    Juillet 2006
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 70
    Par défaut
    Merci nouknouk pour tes conseils.

    Ta solution pour gérer les différents types de données est beaucoup plus simple que mon idée de gérer de l'XML.

    Je vais aussi simplement garder les utilisateurs connectés dans un hashMap.

    Je vais tester tout ça, merci

    auré

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 33
    Par défaut
    Ta solution pour gérer les différents types de données est beaucoup plus simple que mon idée de gérer de l'XML.
    Oui et non... au niveau de l'implémentation, avec XML tu profites d'un parseur "sur étagère" et de plus tu peux contrôler la validité de tes messages par validation de schéma ou de dtd.

    Par contre c'est vrai que si tes messages se limitent à quelque chose de la forme "ATT: valeur", tu n'auras pas de mal à les parser et à contrôler leur validité...

  5. #5
    Membre confirmé
    Inscrit en
    Juillet 2006
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 70
    Par défaut
    Merci drhouse.

    Je pense, dans un premier temps, opter pour la solution de nouknouk qui est la plus simple à mettre en place...

    Cependant, mon but avec le développement de cette application étant essentiellement de manipuler le plus possible le framework java, dés que j'aurai un échange de message fonctionnel, je passerai à une structure plus complète, donc avec du XML (pour ce faire je devrai surement revoir mes méthodes d'envoi et de réception de données).

    Je compte aussi garder un historique de connexions en base de données, je vais donc chercher la meilleur façon de gérer les échanges entre mon application et le serveur de base de données... et ensuite insérer un système d'authentification des utilisateurs.

    Je suppose que d'autres idées me viendront tout au long du développement me permettant de travailler avec d'autres possibilités du framework (vos idées sont les bienvenues...).

    Merci

    auré

  6. #6
    Modérateur
    Avatar de nouknouk
    Homme Profil pro
    Inscrit en
    Décembre 2006
    Messages
    1 655
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 655
    Par défaut
    Citation Envoyé par aure298 Voir le message
    Merci nouknouk pour tes conseils.
    de rien
    Il y a pas mal de discussions intéressantes sur le sujet.

    J'ai d'ailleurs posté il y a quelques temps quelques idées d'architecture (mot pompeux pour ce que c'est) pour une petite lib générique pour les échanges réseaux : ici. Peut-être ça t'inspirera.

    Il y a d'autres messages dans ce style sur le forum ; même si c'est long et parfois ch... de rechercher, ça vaut le coup de fouiner en règle générale

    Ta solution pour gérer les différents types de données est beaucoup plus simple que mon idée de gérer de l'XML.
    C'est loin d'être la seule, au contraire: la seule limite est l'imagination et le soin d'avoir la même implémentation côté client et côté serveur.

    A toi de voir ce qui colle le plus avec tes besoins et tes envies.

  7. #7
    Membre confirmé
    Inscrit en
    Juillet 2006
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 70
    Par défaut
    Merci nouknouk.

    J'ai lu ton post sur l'architecture d'une classe générique. Celle-ci serait très pratique dans mon cas. Mais je ne me sens pas encore capable actuellement de développer ceci...

    Le but de mon application étant essentiellement d'apprendre, j'ai peur de sauter les étapes en me lançant directement dans un tel développement...

    Cependant, sur le moyen terme, cette architecture sera mon objectif...

    auré

Discussions similaires

  1. Echange de fichier via Socket
    Par akrogames dans le forum Entrée/Sortie
    Réponses: 11
    Dernier message: 31/10/2013, 10h10
  2. Connexion via Socket JAVA
    Par jihene dans le forum API standards et tierces
    Réponses: 2
    Dernier message: 08/06/2006, 18h50
  3. Transfert de fichier via sockets...
    Par damien99 dans le forum MFC
    Réponses: 8
    Dernier message: 19/02/2006, 14h41
  4. python & flash : communication via socket -> Null byt
    Par arcane14 dans le forum Réseau/Web
    Réponses: 3
    Dernier message: 30/01/2006, 21h19
  5. Réponses: 9
    Dernier message: 17/08/2004, 16h16

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