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

Bibliothèques C++ Discussion :

Communication via Socket TCP


Sujet :

Bibliothèques C++

  1. #21
    Membre averti
    Avatar de onet
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    365
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2002
    Messages : 365
    Points : 344
    Points
    344
    Par défaut
    Ah... J'ai peut etre une piste...

    Mon bind me retourne -1. Par contre accept me retourne bien 0 (très logique, lol!).

    Bon, maintenant reste à comprendre pourquoi bind me retourne -1...

    Onet
    Ps: merci de ta patience, lol :p)
    ---
    Retrouvez tout mes tutos et mes articles: http://www.olivierlange.com

  2. #22
    Membre averti
    Avatar de onet
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    365
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2002
    Messages : 365
    Points : 344
    Points
    344
    Par défaut
    Purée...

    Quel boulet je fais aprfois... J'ai mis l'ip distant quand je crée le serveur pour recevoir (avec bind), au lieu de mettre mon ip a moi... Boulet, boulet et re boulet...

    Désolé, et encore merci...

    A bientot pour la suite, lol :p

    Onet
    ---
    Retrouvez tout mes tutos et mes articles: http://www.olivierlange.com

  3. #23
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Citation Envoyé par onet Voir le message
    Quel boulet je fais aprfois... J'ai mis l'ip distant quand je crée le serveur pour recevoir (avec bind), au lieu de mettre mon ip a moi... Boulet, boulet et re boulet...
    C'est pour ça que je pense que les noms serv/clts prêtent à confusion. En fait tu as besoin de deux "préfixes" : local/remote pour distinguer les données (addr, etc.) de ton appli de celle distante et ensuite soit tu gardes serv/clt soit requete/reponse pour distinguer tes deux connexions. Ce qui te fait au final 4 jeux de données :
    local_requete_addresse (fait le connect et le send) <-- communique avec --> remote_requete_addresse
    local_reponse_addresse (fait le listen et le recv) <-- communique avec --> remote_reponse_addresse

  4. #24
    Membre averti
    Avatar de onet
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    365
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2002
    Messages : 365
    Points : 344
    Points
    344
    Par défaut
    Yep,

    Effectivement. Je vais regarder cela de plus pret pour la version finale.

    En tout cas merci pour le coup de main. par contre, je pensais pas qu'un listen() pouvait renvoyé un 0 si le bind avait renvoyé un -1...

    Onet
    ---
    Retrouvez tout mes tutos et mes articles: http://www.olivierlange.com

  5. #25
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Citation Envoyé par onet Voir le message
    par contre, je pensais pas qu'un listen() pouvait renvoyé un 0 si le bind avait renvoyé un -1...
    En fait, dans beaucoup d'implémentations, la socket est rattachée à des valeurs par défaut au moment du listen si aucun bind n'a été fait. Tu peux les obtenir par la suite avec getsockname. A quoi ça peut servir ? A être sur que tu vas prendre un couple adresse/port disponible et que ton bind ne va pas échouer parce qu'une autre appli utilise le même port.
    Exemple de scénario :
    ouverture d'une socket d'envoi : s1
    ouverture d'une socket de réception : s2
    s2 <- non bloquante
    s2 <- listen
    récupération du 'nom' de la socket avec getsockname(s2)
    envoi des infos de s2 au distant par s1
    select sur s2 pour attendre la connexion
    ...
    le distant peut maintenant se connecter à s2.

  6. #26
    Membre averti
    Avatar de onet
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    365
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2002
    Messages : 365
    Points : 344
    Points
    344
    Par défaut
    Oki,

    Intéressant! merci

    Si tu repasse par la (si j'abuse pas :p) comment je rends mon serveur non bloquant, avec ta solution (enfin, la mienne, dans mon cas :p)?

    Onet
    ---
    Retrouvez tout mes tutos et mes articles: http://www.olivierlange.com

  7. #27
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Sous windows, ce serait ioctlsocket + FIONBIO.
    Sous Linux, je ne sais pas. Peut-être faut-il regarder du côté de fcntl ou ioctl ?
    Sinon, as-tu envisagé d'utiliser Boost.Asio qui t'abstrait de toutes ces petits détails ?

  8. #28
    Membre averti
    Avatar de onet
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    365
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2002
    Messages : 365
    Points : 344
    Points
    344
    Par défaut
    Ok, merci de l'info.

    Oui, j'ai regardé pour Boost, mais je voulais déja comprendre comment ca fonctionnait avant d'abstraire tout cela

    Onet
    ---
    Retrouvez tout mes tutos et mes articles: http://www.olivierlange.com

  9. #29
    zul
    zul est déconnecté
    Membre éclairé Avatar de zul
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    498
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 498
    Points : 699
    Points
    699
    Par défaut
    ioctl + FIONBO sous Unixoide (renvoie -1, errno=EAGAIN si il n'y a rien à lire / écrire).
    Sinon tu peux utiliser le mécanisme select (ou autre mécanisme spécialisé kevent / epoll).

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. reperer deconnexion lors d'une copie de fichier via socket tcp
    Par dumoulex dans le forum Entrée/Sortie
    Réponses: 1
    Dernier message: 23/06/2011, 14h57
  2. [WM15] Communication via sockets
    Par fucce dans le forum Windev Mobile
    Réponses: 5
    Dernier message: 23/02/2010, 18h51
  3. Communication par socket TCP entre module windows et linux
    Par =o0 MOH =0o= dans le forum Réseau
    Réponses: 2
    Dernier message: 29/03/2007, 17h04
  4. python & flash : communication via socket -> Null byt
    Par arcane14 dans le forum Réseau/Web
    Réponses: 3
    Dernier message: 30/01/2006, 21h19

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