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

Réseau C Discussion :

besoin de precision


Sujet :

Réseau C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 17
    Par défaut besoin de precision
    bonjour à tous,

    J'aimerai savoir comment est ce qu'on passe d'un serveur-client (c'est à dire qu'il n'y a qu'un client qui dialogue avec un serveur) à un serveur-multiclient (+de 1 client connecté au serveur)

    En cours on nous a seulement appris à coder un serveur et un client TCP ,mais je veux réaliser un programme qui utilise un serveur et 2 clients .

    Je ne sais pas quelles modifications je dois apporter dans le serveur, ni meme comment créer 2 clients
    En me documentant sur internet, j'ai vu qu'il fallait utiliser select() , mais meme en consultant "man select" je comprends pas son fonctionnement

    J'ai quelques questions qui me tracassent depuis des jours:
    • dois je créer un client à l'intérieur duquel je fais 2 socket(...)

    si c'est le cas comment le serveur saura de qui provient le message???

    • comment utiliser select()


    • comment envoyer un message au bon client?


    Bref j'espere que vous avez compris que je suis un peu perdu


    Merci d'avance et sorry d'avoir été long...

    Alors si une ame charitable passe par là , je lui sera éternellement reconnaissante si elle éclairait un peu ma lanterne .

  2. #2
    Membre confirmé
    Inscrit en
    Avril 2007
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 40
    Par défaut
    Pour la gestion multiclient le cas général que j'ai vu c'est de créer du multithread.

    - Serveur en écoute
    - Un client se connecte
    - Création d'un nouveau thread d'écoute

    - Dialogue avec le client
    - Fermeture de la connection
    - Fin du thread

    Si un autre client viens se connecter c'est ton 2nd thread qui prend en charge et ainsi de suite ... évidement il faut gérer un nombre de connection max sinon tu risques de planter si tu subits trop de connections, dans ce cas les connections entrentent sont en attente en fonction du timeout.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 17
    Par défaut
    Tout d'abord merci pour ta reponse...

    Citation Envoyé par Darwiz
    Pour la gestion multiclient le cas général que j'ai vu c'est de créer du multithread.
    KESAKO ?
    Je ne sais pas ce qu'est un thread, desolé

    Citation Envoyé par Darwiz
    évidement il faut gérer un nombre de connection max sinon tu risques de planter si tu subits trop de connections, dans ce cas les connections entrentent sont en attente en fonction du timeout.
    ce n'est pas listen(int nom_socket, int nb_max_de_connect ) qui gere le nombre de connection ...


    Ceci dit, je ne sais tjs pas comment faire pour passer d'un client à un multiclient ...

    Desolé d'etre lourd mais je vois pas non plus comment le serveur saura quel client envoyé le message, ni auquel en envoyer...

    Si tu as un peu de temps, peux tu me l'expliquer

    EDIT:
    comment stopper une connection ??? Avec close(nom_socket) ???

  4. #4
    Membre expérimenté Avatar de Ksempac
    Inscrit en
    Février 2007
    Messages
    165
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 165
    Par défaut
    Tu obtiendras quasiment toutes les reponses a tes questions en te renseignant sur ce qu'est un thread...c'est un sujet traité en long et en large, je te laisse chercher sur ce forum ou Google

    Une fois que tu auras compris la notion de thread voila grosso modo l'architecture a réaliser :

    Normalement ton client n'a pas a etre modifié. Tout se passe coté serveur. Lorsque celui recoit une demande de connexion, il crée un nouveau thread qui va s'occuper uniquement de gérer le nouveau client. Ainsi tu as un thread par client + le thread principal qui est en écoute perpétuelle pour de nouveaux clients (et select permet justement d'écouter sans bloquer)

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 17
    Par défaut
    Merci pour ta reponse Ksempac...

    Je vais +

    Si je comprends pas j'espere que vous serez encore là pour m'aider ...

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 17
    Par défaut j'ai fait qq recherche et...
    Citation Envoyé par Ksempac
    Tu obtiendras quasiment toutes les reponses a tes questions en te renseignant sur ce qu'est un thread...
    J'ai fait qq recherche sur les thread, et apparement, ça s'utilise avec des interfaces graphiques (??) et avec des langages orientés objet (java c++...)

    je n'ai rencontré aucunes sources ou documents en C...

    J'ai peut etre pas compris, mais en gros j'ai l'impression que c'est Thread VS select()

    Moi je dois utiliser select() je suis bloqué là, il faut que je finisse mon programme pour la mi-Mai et j'avance pas trop là...

    alors SVP

    Ce que j'ai à peu près compris:
    • je dois ajouter dans le serveur un select() (ou tread ???)

    • mettre un nb de connection max dans listen()



    Ce que doit effectuer mon programme:


    serveur: invite le client 1 à saisir 2 chiffres
    client 1: les lui envoie
    serveur: regarde si le nb de chiffre est bon et que 0<chiffre<4
    si il y'a erreur il envoie 0 au client 1
    sinon
    pareil qu'avant sauf il traite client 2 et ainsi de suite


    J'espere ne pas etre trop confus dans mes explications

  7. #7
    Membre expérimenté Avatar de Ksempac
    Inscrit en
    Février 2007
    Messages
    165
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 165
    Par défaut
    Bon alors premierement, arrete de parler de select de listen ou meme de language. Il faut savoir faire les choses dans l'ordre : Avant de passer a la pratique, on apprends la theorie. Donc avant de t'occuper de l'implementation, je t'ai dit qu'il fallait que tu comprennes la notion theorique de thread. Je ne sais pas ce que tu as trouvé comme lien mais visiblement t'as rien compris aux threads

    Je ne sais pas si tu sais ce qu'est un fork. Faire un fork permet de creer a partir d'un processus, un second processus indépendant du premier. Cela permet d'obtenir 2 processus executant des taches en parallele. Cependant comme les processus sont indépendants on peut difficilement les faire communiquer entre eux (et multiplier les processus c'est pas une bonne facon de programmer).

    Les threads permettent un peu la meme chose, mais de maniere plus elegante. Lorsqu'on cree un thread, on cree une nouvelle "tache" qui s'execute a l'interieur du processus qui l'a créé. On obtient donc 2 taches (threads) qui tournent en parallele, mais dans le meme processus. Du coup ces taches son plus etroitement liées et peuvent communiquer plus facilement entre elles.

    Franchement, c'est a se demander comment tu as fait ta recherche.
    Premier lien google FR en tapant thread : http://fr.wikipedia.org/wiki/Processus_l%C3%A9ger
    Je l'ai a peine lu, il est pas forcement bon ou meme suffisant , mais c'est deja une premiere piste. A toi de completer la recherche...

    Donc je repete : avant de te préoccuper de l'implémentation en C, du select, du listen ou autre, essaye de bien maitriser la theorie sur les threads.
    Quand t'auras compris ce que c'est qu'un thread, tu pourras commencer a voir comment ca se gere en C. Si tu es sous linux tu pourras utiliser la bibliotheque pthread. Sous Windows ya ce qu'il faut aussi, mais je ne connais pas bien cette plateforme, c'est a toi de chercher ("Thread Windows" dans google devrait t'apporter une solution rapidement )

Discussions similaires

  1. Mémoire vive, virtuelle, etc. Besoin de précisions
    Par marchand_de_sable dans le forum Composants
    Réponses: 2
    Dernier message: 26/11/2006, 18h20
  2. Export vers Excel, besoin de précisions.
    Par T'chab dans le forum Access
    Réponses: 3
    Dernier message: 15/05/2006, 09h32
  3. Besoin de précisions les methodes techniques
    Par you98 dans le forum UML
    Réponses: 5
    Dernier message: 15/10/2005, 15h25
  4. besoin de precision sur gluLookAt!
    Par bakonu dans le forum OpenGL
    Réponses: 3
    Dernier message: 25/04/2004, 19h05

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