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

Développement Discussion :

[sockets][UDP][C/C++] serveur multi-clients


Sujet :

Développement

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    205
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 205
    Points : 182
    Points
    182
    Par défaut [sockets][UDP][C/C++] serveur multi-clients


    dans le cadre de la programmation d'un p'tit logiciel en réseau (un jeu, en fait ), je suis à la phase de conception de la partie client-serveur (en gros, la base du jeu, quoi...).
    en me documentant un peu, j'ai choisi d'utiliser le protocole UDP par l'intermédiaire de la librairie SDL_Net (le reste du jeu sera fait avec la SDL et plus tard, avec OpenGL).

    pour le client, pas de problème.
    mais par contre, pour le serveur, ça devient compliqué : toutes les docs que j'ai trouvé concernent la communication d'un serveur avec UN seul client (donc, un seul socket côté serveur).
    Or, j'aimerais savoir comment faire un multi-clients :
    - est-ce que je peux utiliser un seul socket pour tous les clients, sachant que chaque packet que je reçois contient l'IP de l'expéditeur (donc, je peux identifier les clients facilement ?) ?
    - OU est-ce que je dois créer un socket pour chaque client ?

    [edit]
    en plus de ce problème à résoudre, il y a dans la structure du packet UDP une variable nommée "channel". à quoi correspond t elle ?
    [/edit]

    voilà, j'espère être assez clair
    "Les gardiens de la paix, au lieu de nous la garder, ils feraient mieux de nous la foutre." (Coluche)

    Ma Brute

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mai 2006
    Messages : 18
    Points : 10
    Points
    10
    Par défaut
    d'après ce que j'ai compris des sockets, la fonction recvfrom utilise une structure d'adresse vide que tu définit, qui est renseigné PAR l'expéditeur.
    Ainsi, n'importe quel client peuvent envoyer sur un serveur.

  3. #3
    Membre éprouvé
    Profil pro
    Eleveur de cornichons
    Inscrit en
    Juin 2002
    Messages
    1 074
    Détails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Eleveur de cornichons
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 074
    Points : 1 166
    Points
    1 166
    Par défaut
    Un socket par client. Chaque client est traité dans un thread pour pas bloquer.
    En clair, en pseudo code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    boucle infinie
     sockClient = serveur.attente();
    // un client s'est connecté
    // on lance le thread avec le socket du client en argument
    new Thread_client(sockClient);
    Nas'

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    205
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 205
    Points : 182
    Points
    182
    Par défaut
    ok, Nasty, pour ta réponse
    là, je comprends bien le système, je vais pouvoir programmer correctement.
    en ce qui concerne les channels, j'ai vérifié, c'est une commodités de SDL_Net qui permet de définir un socket par un numéro (une sorte d'index) au lieu de l'adresse (mémoire) du socket.
    "Les gardiens de la paix, au lieu de nous la garder, ils feraient mieux de nous la foutre." (Coluche)

    Ma Brute

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2005
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 17
    Points : 9
    Points
    9
    Par défaut
    Ben là on parle de socket UDP, donc à mon avis il serait mieux d'utiliser un socket pour l'ensemble des clients, et d'utiliser la fonction select() pour éviter de bloquer la boucle principale...

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

Discussions similaires

  1. Problème Socket Java architecture Serveur multi Client
    Par abdelhak_z dans le forum Entrée/Sortie
    Réponses: 6
    Dernier message: 23/03/2015, 13h42
  2. Serveur multi-clients UDP TCP
    Par ludovskys dans le forum Réseau
    Réponses: 2
    Dernier message: 23/12/2011, 12h29
  3. Communication Serveur- Multi Client via socket
    Par jesuisperdu dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 14/03/2011, 09h37
  4. Liste chainée, sockets, serveur multi clients.
    Par jbarreau-mainson dans le forum Réseau
    Réponses: 4
    Dernier message: 01/05/2009, 12h15
  5. Probleme Serveur/Multi-client avec socket
    Par CouaC dans le forum Réseau
    Réponses: 9
    Dernier message: 18/06/2007, 00h49

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