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

  1. #1
    Membre à l'essai
    Homme Profil pro
    Consultant en technologies
    Inscrit en
    juin 2016
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant en technologies

    Informations forums :
    Inscription : juin 2016
    Messages : 15
    Points : 15
    Points
    15

    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 à l'essai
    Homme Profil pro
    Consultant en technologies
    Inscrit en
    juin 2016
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant en technologies

    Informations forums :
    Inscription : juin 2016
    Messages : 15
    Points : 15
    Points
    15

    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
    5 774
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : juin 2010
    Messages : 5 774
    Points : 25 361
    Points
    25 361

    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 à l'essai
    Homme Profil pro
    Consultant en technologies
    Inscrit en
    juin 2016
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant en technologies

    Informations forums :
    Inscription : juin 2016
    Messages : 15
    Points : 15
    Points
    15

    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
    5 774
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : juin 2010
    Messages : 5 774
    Points : 25 361
    Points
    25 361

    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.

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