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 Client Serveur Socket


Sujet :

Entrée/Sortie Java

  1. #1
    Membre du Club
    Inscrit en
    Novembre 2009
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 7
    Par défaut Conception Client Serveur Socket
    Bonjour, J'essaye de réalisé un petit Tchat mutlisalon. Jusque là tout a été; j'ai réussi à cloisonner mon tchat en salon. Je me suis basé sur le script de SimpleServer de ce même site. Cependant je voudrai faire en sorte qu'un client spéciale (un genre de bot) soit créer par salon afin d'envoyer des infos tout les 5 minutes. Et la je cal .

    Car en effet vue que c'est une connexion en interne que je veux réaliser je ne vois pas comment la faire...

    Je vous montre un petit bout de code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     while (true) {// attente en boucle de connexion (bloquant sur ss.accept)
            new BlablaThread(ss.accept(),blablaServ); // un client se connecte, un nouveau thread client est lancé
          }
    Le serveur attend donc chaque connexion du client.

    Comment faire pour connecter mon genre de bot , affin qu'il face partie de la socket ? J'avais pensé à faire une connexion classique ( new Socket() ) cependant il sera considéré comme un client classique( et donc implementer des class Utilisateurs). Je ne vois donc pas comment différencier les clients ou bien créer une connexion en dehors de la boucle sur le ServerSocket courant.

    J'espère avoir été clair. Merci de votre aide

    Cordialement, Jean-Baptiste

  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 : 45
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 655
    Par défaut
    salut,

    Les différentes solutions sont envisageables, donc il va falloir en choisir une d'abord. Au delà de l'aspect technique - et si j'ai bien compris - tu hésites entre deux possibilités:

    1- soit décider que le code spécifique au bot (la 'logique du bot') est une partie des fonctionnalités du serveur lui même ("créer une connexion en dehors de la boucle sur le ServerSocket courant") et donc 'inclure' le bot dans le programme du serveur lui-même.

    2- soit différencier les deux codes et faire que finalement un bot est un client comme un autre ("J'avais pensé à faire une connexion classique ( new Socket() )"), donc deux applis différentes.

    Perso, j'aurais une large préférence pour la solution 2, qui est plus modulaire et donc plus flexible:

    - le jour où on ne veut plus du bot, on ne l'utilise simplement plus et du code inutile ne traine pas dans ton programme serveur.

    - le jour où on fait des changements de comportement du bot et/ou qu'on veut implémenter de nouveaux types de bot, pas besoin de toucher au code du serveur (ni même avoir à le redémarrer ; juste changer et relancer le(s) bot(s)).

    - si le bot est un client comme un autre qui se connecte avec un Socket, on pourrait très bien exécuter le serveur et le bot sur deux machines différentes.

  3. #3
    Membre du Club
    Inscrit en
    Novembre 2009
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 7
    Par défaut
    Je pensais moi aussi plus opté pour la deuxième solution. C'est à dire concidérer le bot comme un client indépendant. Cela permet comme tu dit <nouknouk> de faire en sorte de le rendre indépendant.

    Mais alors comment faire en sorte que celui ci ce connecte à l'application en interne et n' instancie pas le Thread de client classique. ? Peut t'ont créer une connexion en dehors de la boucle Run() ?

    Merci de votre aide.
    Cordialement Jean-Baptiste.

  4. #4
    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 : 45
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 655
    Par défaut
    Non, l'idée est que ton serveur verra le bot comme un client classique, simplement celui-ci aura des droits supplémentaires que les clients 'classiques' n'auront pas.

    Concrètement, ça veut dire:

    1- qu'il faut ajouter à ton serveur la notion de gestion 'droits' pour un utilisateur. En d'autres termes, à chaque client sera attaché une description de ce qu'il a le droit de faire ou pas (pas exemple kicker et bannir des gens).

    Ca peut être quelque chose d'extrêment trivial (genre un booléen 'isOperator' qui s'il est à true autorise les commandes kick & ban pour cet utilisateur ; les refuse s'il est à false).

    Ca peut être quelque chose de plus complexe: gérer par exemple les droits par utilisateur ET par salon de discussion. Par exemple le client 'nouknouk' a les droits d'opérateur (kick) sur le canal #nouk, mais est simple visiteur sur le canal #pmu ; un bot sera quant à lui admin (kick & ban) sur les deux canaux, etc...

    2- qu'il faut ajouter un mécanisme pour donner les bons droits aux bons 'clients'. Pour cela, il n'y a pas 36 solutions: un client qui se connecte aura au départ par défaut les droits minimums (simple visiteur) ; puis il pourra éventuellement envoyer une commande d'authentification au server (avec login/pass par exemple) pour demander l'octroi de droits supplémentaires.

    Et voilà: d'un point de vue 'code', tes bots seront des clients comme les autres et tu n'as rien à toucher à ta socket d'écoute et sa boucle associée pour y arriver.

  5. #5
    Membre du Club
    Inscrit en
    Novembre 2009
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 7
    Par défaut
    Je pense que cela peu être plus compliqué que cela car mon projet est plus précis que ça.

    J'essaye de réaliser un serveur avec un bot qui puisse envoyer des questions tout les X secondes. De ce faite il y a les clients dit joueur et les clients dit Bot. Je ne vois pas comment différencier les différentes types de clients ce n'ai pas une question de droit car ils on des fonctions totalement différent.

    Merci d'éclairer ma lanterne !!

    Cordialement.

  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 : 45
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 655
    Par défaut
    Pour faire le tour de la question et être sûr de ne rien oublier, on peut peut-être commencer par faire l'inventaire de chaque fonctionnalité à implémenter et quel(s) profil(s) ('client classique' et/ou 'bot') en auront besoin.

    A vous les studios

  7. #7
    Membre du Club
    Inscrit en
    Novembre 2009
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 7
    Par défaut
    Les implémentations sont simple:

    - le Client (joueur):
    récuperation des informations joueurs
    Envoye des listes Joueurs
    Envoye de message

    -Le Bot :
    Récuperation des questions
    Envoye des questions
    Annalyse des réponse Joueurs
    Changement des données Joueurs(score, autres)

    Je vois donc ça comme actions.

  8. #8
    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 : 45
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 655
    Par défaut
    J'avoue avoir du mal à cerner ce que tu veux faire exactement.
    Tu pourrais peut-être préciser chaque point évoqué ci-dessus, genre:

    Citation Envoyé par jeanbadel Voir le message
    récuperation des informations joueurs
    Qui récupère quoi, depuis où, le stocke où ?
    Envoye des listes Joueurs
    Qui envoie quoi à qui, quand ? quelles infos exactement (tous les joueurs connectés ? joueurs faisant partie d'une salle de discussion spécifique ? etc...)
    Envoye de message
    Qui envoie quoi à qui ? quand ?

    Citation Envoyé par jeanbadel Voir le message
    -Le Bot :
    Récuperation des questions
    Qui récupère quoi, depuis où, le stocke où ? quand ?
    Envoye des questions
    Quand, comment, à qui ? quand ?

    Annalyse des réponse Joueurs
    par quel mécanisme, à quel moment, quelles infos transitent entre les 'clients' ?

    Changement des données Joueurs(score, autres)
    Quelles données, stockées où, pour quelles nouvelles valeurs récupérées où ? quand ?


    Idem pour le concept le plus détaillé possible du projet: dans ton premier message tu as évoqué un "Tchat mutlisalon" et il semblerait que ce soit plus que ça.

  9. #9
    Membre du Club
    Inscrit en
    Novembre 2009
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 7
    Par défaut
    Récapitulation des class:

    Joueurs > Vecteur Joueurs
    Question > Vecteur Question
    Partie > Vecteur Parties

    le serveur contient donc une liste de parties.
    une partie contient une liste de joueurs ainsi q'une liste de questions + ( ce que je trouverai logique un bot)

    LE JOUEUR:

    récuperation des informations joueurs
    Récuperation du pseudo lors de la première connexion ( le client l'envoye). De ce faite la dal récupere les informations d'un joueur en base de donnée et implémente la class singulière ( la class singulière contient aussi un variable qui contient le flux de sortie correspondant au joureur)

    Envoye des listes Joueurs
    Chaque joueur est ajouter dans une class pluriel Joueurs qui permet de renvoyer une chaine XML listant les joueurs qui est envoyé à chaque flux de sortie au joueur afin qu'il est la liste des joueurs.

    Envoye de message
    De plus les joueurs sont ajouter dans une class singulière partie qui comprend une liste de joueurs et une listes de questions
    De ce faite un joueur envoye des message à tout les joueurs d'une même partie.

    LE BOT:

    Le bot est donc créer lors de la création d'une partie.
    A donc accès à la liste des questions et la listes des joueurs.
    Les questions sont récupérer aléatoirement lors de la création de la partie.


    Envoye des questions
    Le bot devrai envoye une question à interval régulier. Il la récupere dans la liste des questions.

    Annalyse des réponse Joueurs
    Doit pouvoir lire les différents flux d'entree des Joueurs comprenant une partie et ainsi annalysé leur réponse selon la question envoyé.


    Changement des données Joueurs(score, autres)
    Si la réponse est bonne accède à la class dal du joueurs et peu ainsi modifier les donnée du joueur dans la base de donnée

    Actuelement lors d'une nouveau connexion le thread de connexion est typé en joueurs de ce faite dès que j'essaye de connecté un bot celui ci est aussi typé joueurs. Ma conception est peu être totalement fausse dès le départ ( que ce soit de la gestion des parties, a la conception de client du serveur)


    Cordialement Jean-Baptiste.

Discussions similaires

  1. Réponses: 5
    Dernier message: 22/02/2010, 00h16
  2. Client/Serveur Socket, envoyer un message précis
    Par Chyokyka dans le forum Débuter
    Réponses: 4
    Dernier message: 24/03/2009, 18h59
  3. Application client/serveur sockets
    Par loreleï85 dans le forum Réseau
    Réponses: 4
    Dernier message: 05/01/2007, 13h44
  4. Question client-serveur socket
    Par Lex99 dans le forum Développement
    Réponses: 3
    Dernier message: 07/02/2006, 10h01
  5. Réponses: 7
    Dernier message: 19/10/2004, 20h09

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