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 :

[Conception][Socket]Conception d'un "chat"


Sujet :

Entrée/Sortie Java

  1. #1
    Membre expert

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 301
    Points : 3 675
    Points
    3 675
    Par défaut [Conception][Socket]Conception d'un "chat"
    Bonjour à tous,

    j'aimerais me mettre au codage d'un petit chat destiné aux réseaux LAN
    (un peu genre MSN Messenger mais déjà pour du LAN...).

    Je bloque un peu sur l'utilisation des ServerSocket... dois-je utiliser un
    ServerSocket par instance du programme (chaque programme lancé sur
    le réseau a sa propre ServerSocket, toujours sur le meme port, et
    toujours en serverSocket.accept()), et aussi un tableau ou vecteur
    de Socket qui servira à gérer les connexions initialisées à partir du local vers les autres postes?

    moi je pencherais pour ça, mais je n'en suis pas très sûr...

    est-ce que quelqu'un pourrait me le confirmer ou me l'infirmer ?

    et aussi, comment puis-je explorer le réseau afin de détecter tous les
    utilisateurs qui ont une instance de mon programme lancée (c'est à dire, tous les utilisateurs qui sont sur le chat)?

    Merci de vos réponses !
    "Le plug gros problème des citations trouvées sur internet, c'est qu'on ne peut jamais garantir leur authenticité"

    Confucius, 448 av. J-C

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 66
    Points : 80
    Points
    80
    Par défaut
    Le plus simple serait de faire une architecture client/serveur ou chaque instance de ton programme se connecte au serveur. Seul le serveur aurait un ServerSocket pour gerer les nouvelles connection.
    Ton idée visiblement est de créér un réseau en p2p ou tout le monde se connecterait à tout le monde, mais je te le déconseille: c'est beaucoup plus compliqué et dans ton cas cela n'apporte rien.

  3. #3
    Membre expert

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 301
    Points : 3 675
    Points
    3 675
    Par défaut
    hello,


    oui, mais cela veut aussi dire qu'il faut 2 programmes différents, un sur
    un serveur et l'autre sur les clients... hors, je ne pourrai pas avoir de
    serveur permanent pour ce chat (j'aimerais pouvoir implanter ça à
    l'arrache dans mon bahut, c'est le seul coin où j'aie plus de 2pc connectés
    ensemble et c'est bourré de DHCP, proxy, parefeus,.... bref on est vite
    limités)...

    j'aimerais qu'il soit autonome et relativement intelligent (en tout cas, capable d'explorer le réseau sans passer par un serveur que l'on devrait de toute façon configurer)...

    mais ce n'est pas une mauvaise idée, je pourrais déjà me faire la main comme ça ....
    "Le plug gros problème des citations trouvées sur internet, c'est qu'on ne peut jamais garantir leur authenticité"

    Confucius, 448 av. J-C

  4. #4
    Membre régulier
    Inscrit en
    Avril 2004
    Messages
    68
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 68
    Points : 72
    Points
    72
    Par défaut
    A ma connaissance, même pour le P2P, il faut un serveur ; dans le cas du P2P son rôle est très léger, puisqu'il indique uniquement la liste des connectés. Ensuite chacun se connecte à chacun sans passer par le serveur. Mais, sans serveur, c'est quasi-impossible.

    Tu peux peut être procéder par une liste d'abonnés qui se met à jour si tous la gèrent et se l'échangent pour tout le monde. Mais je te raconte pas les problèmes théoriques.

    Par contre, tu peux être sauvé en remarquant que le serveur P2P n'a pas besoin d'être très intelligent ; quelqu'un d'osé peut même imaginer que c'est un simple fichier mis à jour par FTP (donc même plus besoin d'y installer un programme java), qui donne l'adresse du serveur P2P de la liste, qui donne...

    C'est un peu plus simple, mais reste sioux. Si tu ne sais même pas de quel coté doit être le ServerSocket, je te conseille vivement de laisser tomber et de commencer par des trucs hyper-classiques. Par exemple, tu donnes par téléphone l'adresse IP de ton PC...

  5. #5
    Membre expert

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 301
    Points : 3 675
    Points
    3 675
    Par défaut
    Citation Envoyé par tileffeleauzed
    Si tu ne sais même pas de quel coté doit être le ServerSocket, je te conseille vivement de laisser tomber et de commencer par des trucs hyper-classiques.
    justement, les trucs classiques, je les ai déjà implémentés et je voulais
    essayer d'aller un peu plus loin.

    vu qu'apparement il est impossible de se passer de serveur (dommage !),
    je crois que je vais déjà réaliser cette solution...

    j'ai déjà l'interface graphique des clients, il me reste qu'à définir un genre
    de protocole de communication...

    si je résume, les clients se connectent vers un serveur statique, qui
    contient la liste des connectés. Lors de la première connexion, je renvoie
    les identifiants de tous les connectés, afin que le client choisisse avec
    quelle personne il souhaite communiquer. Une fois choisi, j'établis sur le
    poste client un Socket avec l'autre personne, et en avant berthe...

    pour la dernière opération, est-ce que je dois créer un ServerSocket sur
    le client, ou bien est-ce que je fais tout passer dans le serveur statique ?
    Les perfs seront elles correctes ou bien ce sera hyper lent ?
    "Le plug gros problème des citations trouvées sur internet, c'est qu'on ne peut jamais garantir leur authenticité"

    Confucius, 448 av. J-C

  6. #6
    Membre régulier
    Inscrit en
    Avril 2004
    Messages
    68
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 68
    Points : 72
    Points
    72
    Par défaut
    Citation Envoyé par Pill_S
    pour la dernière opération, est-ce que je dois créer un ServerSocket sur le client, ou bien est-ce que je fais tout passer dans le serveur statique ? Les perfs seront elles correctes ou bien ce sera hyper lent ?
    C'est comme tu veux. Dans le premier cas c'est du P2P.

    Dans le deuxième cas, qui demande plus de boulot au serveur, il faut une machine solide, mais, à moins que tu aies 36.000 connectés, un orfinateur de supermarché devrait suffire.

  7. #7
    Membre éclairé
    Avatar de divxdede
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    525
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2004
    Messages : 525
    Points : 844
    Points
    844
    Par défaut
    Tu peux t'orienter vers un systeme de Chat "MultiCast" afin de ne pas avoir de serveur.

    L'idée est assez simple!
    Un programme "client" se lance et s'inscrit sur l'adresse multicast que tu auras reservé a ton Chat

    Quand il ecrit un message, au lieu de l'envoyer à un serveur ou a tout les client, tu envoies le message sur l'adresse multicast

    Quand un paquet multicast est intercepté par une carte réseau, sa pile regarde si l'ordi s'est inscrit sur cette adresse, si oui elle traite le paquet si non elle l'ignore.

    Avec ce principe tu peux t'eviter le serveur. et économiser la bande passante de ton réseau.

    Pour un LAN c'est tranquilou. pour faire ca sur l'internet c'est plus chaud car tout les routeurs/etc.. ne supporte pas les protocoles Multicast et en plus il faut une adresse multicast a soi.
    JBusyComponent, une API pour rendre occupé un composant swing.
    SCJP Java 6.0 (90% pass score)

  8. #8
    Membre expert

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 301
    Points : 3 675
    Points
    3 675
    Par défaut
    merci de ton conseil divxdede

    pour l'instant je suis en train de coder avec le principe client/serveur

    jusqu'ici tout va bien, chaque client ouvre un socket avec le serveur, qui
    écoute les message et qui réagit en fonction des commandes envoyées
    (bon c'est pas encore complet, et je manque d'ordinateurs pour pouvoir
    tester plusieurs clients entre eux, et ça me fait chi.... )

    enfin voilà je pense que le topic est résolu

    "Le plug gros problème des citations trouvées sur internet, c'est qu'on ne peut jamais garantir leur authenticité"

    Confucius, 448 av. J-C

+ Répondre à la discussion
Cette discussion est résolue.

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