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

C++ Discussion :

Gestion d'émission et de réception de flux sur sockets


Sujet :

C++

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    224
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 224
    Points : 201
    Points
    201
    Par défaut Gestion d'émission et de réception de flux sur sockets
    Bonsoir!

    Voilà, je suis en train d'écrire un morceau de code pour gérer la communication sur les sockets (si possible portable). Avant de l'entamer, je me suis pas mal renseigné sur les différents possibilitées (un thread par client, pool de thread...) et j'ai trouvé la solution de select() très intéressante.

    Bien que l'ensemble soit fonctionnel, je me rend compte qu'il n'est absolument pas optimal. Je tiens à préciser que malgré les améliorations à apporter, je désirerai pouvoir gérer un maximum de clients tout en gardant un temps de réponse correct.

    Voici mes questions:

    -Quelle utilité de surveiller dans le select l'écriture de donnée puisque nous envoyons les données à un moment précis? ( send() )


    -Actuellement, les données transmises sont censées peser 1024 octets au maximum. Cependant, j'aimerai pouvoir transmettre des messages plus volumineux sans mettre de côté les autres clients.
    J'ai donc pensé une solution que je ne saurai pas mettre en place sans votre aide: Transmettre dès que l'on peut les 1024 premiers octets, puis au passage suivant transmettre encore 1024 et ainsi de suite jusqu'à ce que le message soit entièrement envoyé.
    Il faudrait alors mettre en place un système de "queue" afin de pouvoir ajouter des données à envoyer par la suite (au cas où un message prenne un certain temps)

    -De plus, je ne vois pas trop comment gérer la reception. Logiquement, on va devoir récupérer les données par tranche de 1024 tout comme on les a envoyé tout en stockant progressivement le message dans une variable temporaire avant de le traiter.
    Mais dans ce cas, comment faire pour distinguer un message de 2048 octets, qui sera envoyé en deux parties, de deux messages de 1024 octets différents? J'aimerai de préfèrence ne pas avoir à ajouter des informations dans le message, si il est impossible autrement, que choisir? un caractère non-imprimable?

    Voilà, si vous pouviez m'éclairer un peu, ca m'arrangerai!

    J'accepterai de mettre le code source à disposition si vous me le demandez.

    Merci bien!

  2. #2
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 294
    Détails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 294
    Points : 1 543
    Points
    1 543
    Par défaut
    Salut,

    A moins que tu ne veuilles a tous prix mettre les mains dans le camboui je suggererais d'utiliser une bibliotheque de plus haut niveau (par exemple Boost.Asio) qui apporte des solutions toutes faites a ces questions que tu te poses.

    MAT.

  3. #3
    Alp
    Alp est déconnecté
    Expert éminent sénior

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Points : 11 861
    Points
    11 861
    Par défaut
    boost.asio, ACE, sockets++, et on en passe ...

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    224
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 224
    Points : 201
    Points
    201
    Par défaut
    Très honnetement, j'ai essayé d'utiliser boost.asio et je n'ai pas vraiment réussi, malgré les exemples et le tutorial...

    Mon but et de faire un server/client communicant en TCP/IP en évitant de créer des tonnes de thread et je me suis pas mal perdu dans la syntaxe des fonctions de boost... A la limite si vous avez un lien autre que la documentation direct du site, je suis preneur!

    Je n'enterre pas mon projet, donc si vous avez des idées, je suis preneur également.

    Merci bien! (Je viens de voirs socket++, je vais voir ACE)

  5. #5
    Alp
    Alp est déconnecté
    Expert éminent sénior

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Points : 11 861
    Points
    11 861
    Par défaut
    Tu as aussi le module réseau de la SFML (http://sfml.sf.net/), le module réseau de wxWidgets si tu souhaites réaliser une interface avec wxWidgets, de même pour Qt, etc ...

  6. #6
    Membre actif
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    224
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 224
    Points : 201
    Points
    201
    Par défaut
    Cette bibliothèque m'a l'air vraiment géniale (Network, Interface graphique, Son... le tout portable!), mais elle ne gère pas (encore) le réseau de manière non bloquant, dommage!

    En tout cas, je sais pas si c'est bien de l'avoir fait ou pas, mais j'ai trouvé une solution en lisant le code source:

    Une fois que le message est formé, on envoie la taille du message et ensuite on envoie en conséquance.

    Il faut donc agir sur les données envoyées (ce que je voulais éviter à la base). Je vais surement essayer de construire un système dans ce genre.

    Merci bien!

Discussions similaires

  1. [Audio] Envoi et réception de flux audio avec Java Sound
    Par djanat22 dans le forum Multimédia
    Réponses: 3
    Dernier message: 24/01/2014, 10h38
  2. Quel SGBD pour la gestion des missions d'une association ?
    Par Bragon12 dans le forum Décisions SGBD
    Réponses: 6
    Dernier message: 06/05/2008, 14h32
  3. Gestion de plusieurs flux sur un Switch
    Par Emcy dans le forum Hardware
    Réponses: 2
    Dernier message: 25/01/2008, 09h06
  4. gestion de flux sur un process
    Par pc974 dans le forum Entrée/Sortie
    Réponses: 1
    Dernier message: 26/12/2007, 09h15
  5. Créer une application gestion consultants / missions
    Par mpereg dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 03/10/2007, 15h02

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