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 :

Socket : lecture et écriture simultanée


Sujet :

C++

  1. #1
    Membre Expert
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Par défaut Socket : lecture et écriture simultanée
    Bonjour à tous,

    J'essaye de communiquer avec un serveur de façon totalement "libre" avec boost.Asio. C'est à dire, sur une même socket, écouter en continue de manière asynchrone des requêtes qui pourrait arriver du serveur, et puis écrire n'importe quand sur demande de l'utilisateur (depuis une IHM en fait).
    Lorsque que je veux écrire sur la socket alors que je suis déjà en train d'écouter, j'ai une erreur 10022 invalid_argument.

    Ce que je veux est impossible ?
    Faut-il utiliser 2 sockets sur le même port ? Ou bien 2 sockets avec deux ports différents, un pour la lecture et un pour l'écriture ?


  2. #2
    jmv
    jmv est déconnecté
    Membre chevronné Avatar de jmv
    Profil pro
    Enseignant
    Inscrit en
    Mai 2004
    Messages
    395
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Mai 2004
    Messages : 395
    Par défaut
    Salut,

    (Je ne connais pas boost.Asio, ma réponse risque donc d'être à côté de la plaque)

    Quel protocole utilise-tu ? TCP ou UDP ? ce que tu veux faire me semble difficile en TCP.
    As-tu essayé avec 2 sockets sur le même port ?

    j'ai une erreur 10022 invalid_argument.
    Peux-tu montrer le bout de code qui pose problème ? car vu le message d'erreur, j'ai l'impression qu'il y a un bug dans le code.

  3. #3
    Membre Expert
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Par défaut
    Je suis en train d'essayer 2 sockets sur le même port. Il faut recoder pas mal de trucs alors ça prend du temps.
    Mea culpa, j'a oublié de préciser, je suis en TCP.

    L'erreur invalid_argument est peut-être dû à un effet de bord de la sérialisation de boost. J'utilise une version maison d'un exemple que j'avais trouvé dans la doc de Boost.Asio : tcp_connection. Le code de mon projet commence à devenir un peu lourd, et il m'est difficile de poster un code simple reproduisant l'erreur.

    Je teste avec deux sockets sur le même port, et je te dis !

  4. #4
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 466
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 466
    Par défaut
    Si boost.Asio repose sur les sockets BSD (et je le pense), c'est du bidirectionnel.
    Coté server, il faut bien prendre la socket créé au moment de la connexion du client.

  5. #5
    Membre Expert
    Avatar de Goten
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 580
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 580
    Par défaut
    Ouaip c'est du BSD socket

  6. #6
    Membre Expert
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Par défaut
    Citation Envoyé par bacelar Voir le message
    Si boost.Asio repose sur les sockets BSD (et je le pense), c'est du bidirectionnel.
    Coté server, il faut bien prendre la socket créé au moment de la connexion du client.
    Bien sûr que c'est bidirectionnel.
    La question était : "Si je suis en cours de lecture asynchrone (en attente de trames), est-ce que je peux lancer une écriture asynchrone depuis la même socket ?"

  7. #7
    Membre Expert
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Par défaut
    Bon j'ai fait 2 sockets TCP bindées sur le même port:
    • Une pour la lecture en continu.
    • L'autre au besoin pour l'écriture

    Ca marche au poil, après quelques heures de modifs acharnées !

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

Discussions similaires

  1. design pattern sockets lecture/écriture
    Par rgamor dans le forum Langage
    Réponses: 30
    Dernier message: 25/08/2011, 13h03
  2. stream et lecture/écriture simultanée
    Par Sp4ce dans le forum C#
    Réponses: 5
    Dernier message: 10/12/2008, 15h52
  3. Lecture et écriture sur une même socket ?
    Par nico_ayci dans le forum Réseau
    Réponses: 2
    Dernier message: 19/05/2008, 07h17
  4. [Perl] lecture/écriture simultanées sur une socket
    Par sephiburp dans le forum Programmation et administration système
    Réponses: 10
    Dernier message: 16/10/2007, 10h25
  5. Ouvrir un fichier texte en lecture ET écriture
    Par Steph12 dans le forum C++
    Réponses: 12
    Dernier message: 17/06/2005, 08h08

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