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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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 : 44
    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 : 44
    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 : 44
    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

Discussions similaires

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

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