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 :

socket: connect() ne passe pas


Sujet :

Réseau C

  1. #1
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2016
    Messages
    277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2016
    Messages : 277
    Points : 946
    Points
    946
    Par défaut socket: connect() ne passe pas
    Bonjour,

    dans le cadre d'un cours je dois développer une application client serveur basique avec des sockets. La communication est censée s'effectuer entre deux machines différentes mais travaillant chez moi j'essaye de tester en faisant communiquer deux ports de ma propre machine. Et la primitive connect() me renvoie -1...

    Voici la partie du code avec l'initialisation du bazar:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    memset(&hints, 0, sizeof(hints));
    hints.ai_family = AF_UNSPEC;
    hints.ai_socktype = SOCK_STREAM;
    /*WARNING: verifier cette option*/
    hints.ai_flags = AI_PASSIVE;
    hints.ai_protocol = 0;
    rv = getaddrinfo(NULL, "3000", &hints, &svinfo);
    printf("%i\n",rv);
     
    memset(&hints, 0, sizeof(hints));
    hints.ai_family = AF_UNSPEC;
    hints.ai_socktype = SOCK_STREAM;
    hints.ai_flags = AI_PASSIVE;
    hints.ai_protocol = 0;
    status = getaddrinfo(NULL,"3001",&hints,&res);
    printf("%i\n",status);
     
    sockfd = socket(res->ai_family, res->ai_socktype, res->ai_protocol);
    bind(sockfd, res->ai_addr,res->ai_addrlen);
     
     int con;
    con=connect(sockfd,svinfo->ai_addr,svinfo->ai_addrlen);
    printf("%i\n",con);
    Merci de votre aide.

    Cordialement

  2. #2
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2016
    Messages
    277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2016
    Messages : 277
    Points : 946
    Points
    946
    Par défaut
    Bonjour,
    pour info, errno renvoie "Connection refused".

    Autre chose: j'ai considéré (ce que j'ai compris en cours), que connect() était un appel bloquant, ce qui signifie que je lance pour le moment le client sans avoir lancé le serveur en parallèle (ce qu'il me semble avoir compris, c'est que le connect devrait bloquer l'exécution du code en attendant qu'un "accept" soit appelé par un autre processus...).

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    connect bloque pendant les échanges d'initialisation de la connexion.
    Si rien n'écoute le port demandé, il n'a rien à bloquer et ne se connectera bien entendu jamais.
    Le serveur doit toujours être lancé en premier, sauf à avoir un système de retry.

    Quand accept retourne, la connexion est déjà prête.

    http://www.masterraghu.com/subjects/...2lev1sec6.html
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  4. #4
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2016
    Messages
    277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2016
    Messages : 277
    Points : 946
    Points
    946
    Par défaut
    Merci pour ta réponse Bousk.
    Le serveur ne fonctionnait pas non plus, j'ai compris pourquoi. L'accept est bien bloquant à son niveau, mais j'ai toujours le même problème avec le client.
    Pour info:
    - les ports sont bien les mêmes (j'ai mis 3000 des deux côtés)
    - les deux getaddrinfo() renvoient 0
    - le bind() renvoie 0

    EDIT: j'avais encore oublié un truc côté serveur (le bind), j'ai un nouveau problème, mais différent, affaire à suivre.

  5. #5
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    - bind n'a pas à être utilisé avec le client
    - tu ne peux pas ouvrir plusieurs sockets sur le même port
    - tester les retours n'est pas optionnel

    https://bousk.developpez.com/cours/r...-premiers-pas/
    https://bousk.developpez.com/cours/r...-premiers-pas/
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

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

Discussions similaires

  1. Réponses: 9
    Dernier message: 25/01/2016, 19h30
  2. Réponses: 2
    Dernier message: 21/01/2015, 13h51
  3. probleme avec mon pc dell la connection adsl passe pas
    Par lonetarget91 dans le forum Windows 7
    Réponses: 6
    Dernier message: 19/05/2014, 11h32
  4. [IIS 6] connection ODBC qui passe pas
    Par sevyc64 dans le forum IIS
    Réponses: 11
    Dernier message: 14/11/2011, 22h17
  5. connection ne passe pas
    Par Tuxico dans le forum Réseau
    Réponses: 2
    Dernier message: 13/03/2007, 18h08

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