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 Error 10061


Sujet :

C++

  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2016
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Octobre 2016
    Messages : 18
    Par défaut Socket Error 10061
    Bonjour,

    Je me suis lancer dans la programmation réseau avec l'article de Bousk : Cours programmation réseau en C++ mais je rencontre un probleme pour me connecter en boucle locale avec mon socket que j'ai créé. WSAGetLastError() me renvoie le code d'erreur 10061.

    Voici mon code :

    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    #include <iostream>
    #include <WinSock2.h>
    #pragma (lib, "Ws2_32.lib")
     
    using namespace std;
     
    int main(int argc, char *argv[])
    {
        // Initialisation des DLL pour l'utilisation des sockets
        WSADATA data;
        if(WSAStartup(MAKEWORD(2,2), &data) == SOCKET_ERROR) // retourne un code d'erreur en cas d'échec et 0 sinon
        {
            cout << "Erreur d'initialisation de la bibliothèque des Sockets" << endl;
            cout << "Code d'erreur : " << WSAGetLastError() << endl;
        }
     
        // Création de socket(adresse IP et Port, flux de transfert de donnée via réseau)
         SOCKET sock = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
         if(sock == INVALID_SOCKET)
         {
             cout << "Erreur de création de Socket" << endl;
             cout << "Code d'erreur : " << WSAGetLastError() << endl;
         }
     
         // Indexation du serveur auquel on doit se connecter
         sockaddr_in server;
         server.sin_addr.s_addr = inet_addr("127.0.0.1");
         server.sin_family = AF_INET;
         server.sin_port = htons(50221);
     
         // Connection au serveur
         if(connect(sock,(const sockaddr *)&server,sizeof(server)) == SOCKET_ERROR)
         {
             cout << "Impossible de se connecter au serveur" << endl;
             cout << "Code d'erreur : " << WSAGetLastError() << endl;
         }
         else
         {
             cout << "Client connecté au port " << server.sin_port << endl;
         }
     
         // Fermeture/Liberation du socket
         if(closesocket(sock) ==  SOCKET_ERROR)
         {
             cout << "Erreur de fermeture du Socket" << endl;
             cout << "Code d'erreur : " << WSAGetLastError() << endl;
         }
        if(WSACleanup() == SOCKET_ERROR) // retourne SOCKET_ERROR en cas d'erreur et 0 sinon
        {
            cout << "Erreur libération de la bibliothèque des Sockets" << endl;
            cout << "Code d'erreur : " << WSAGetLastError() << endl;
        }
     
        return 0;
    }
    Après compilation et exécution j'obtiens :

    Nom : Capture.PNG
Affichages : 1938
Taille : 3,3 Ko

    Quelqu'un pourrait-il m'aider à m'en sortir ?

  2. #2
    Rédacteur/Modérateur


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

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 147
    Billets dans le blog
    4
    Par défaut
    Salut,

    ravi que mes articles te soient utiles

    10061 est le code pour connection refused.
    As-tu oublié de lancer le serveur avant d'essayer de t'y connecter ? Est-il lancé sur le bon port ?
    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.

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2016
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Octobre 2016
    Messages : 18
    Par défaut
    Citation Envoyé par Bousk Voir le message
    ravi que mes articles te soient utiles
    Ca fait longtemps que je cherchais un cours du genre pour mes projets et approfondissement en programmation. Merci beaucoup pour ce article !

    Citation Envoyé par Bousk Voir le message
    As-tu oublié de lancer le serveur avant d'essayer de t'y connecter ? Est-il lancé sur le bon port ?
    Oui je l'avais oublier. Je viens de l'écrire mais le problème persiste. Voici mes codes et aperçu de l'exécution :

    Serveur :

    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    #include <iostream>
    #include <WinSock2.h>
    #pragma (lib, "Ws2_32.lib")
     
    using namespace std;
     
    int main(int argc, char *argv[])
    {
        // Initialisation des DLL pour l'utilisation des sockets
        WSADATA data;
        if(WSAStartup(MAKEWORD(2,2), &data) == SOCKET_ERROR) // retourne un code d'erreur en cas d'échec et 0 sinon
        {
            cout << "Erreur d'initialisation de la bibliothèque des Sockets" << endl;
            cout << "Code d'erreur : " << WSAGetLastError() << endl;
        }
     
        // Création de socket(adresse IP et Port, flux de transfert de donnée via réseau)
         SOCKET sock = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
         if(sock == INVALID_SOCKET)
         {
             cout << "Erreur de création de Socket" << endl;
             cout << "Code d'erreur : " << WSAGetLastError() << endl;
         }
     
         // Indexation des clients qui peuvent se connecter
         sockaddr_in client;
         client.sin_addr.s_addr = inet_addr(ADDR_ANY);
         client.sin_family = AF_INET;
         client.sin_port = htons(61111);
     
         bind(sock,(const sockaddr *)&client,sizeof(client));
     
         listen(sock,0);
         cout << "En attente de connection ..." << endl;
     
         // Attente de connection
         while(1)
        {
         int taille = sizeof(client);
         if(accept(sock,(sockaddr *)&client,&taille) != INVALID_SOCKET)
         {
             cout << "Client connecté au port " << client.sin_port << endl;
         }
        }
         // Fermeture/Liberation du socket
         if(closesocket(sock) ==  SOCKET_ERROR)
         {
             cout << "Erreur de fermeture du Socket" << endl;
             cout << "Code d'erreur : " << WSAGetLastError() << endl;
         }
        if(WSACleanup() == SOCKET_ERROR) // retourne SOCKET_ERROR en cas d'erreur et 0 sinon
        {
            cout << "Erreur libération de la bibliothèque des Sockets" << endl;
            cout << "Code d'erreur : " << WSAGetLastError() << endl;
        }
     
        return 0;
    }
    Client :

    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    #include <iostream>
    #include <WinSock2.h>
    #pragma (lib, "Ws2_32.lib")
     
    using namespace std;
     
    int main(int argc, char *argv[])
    {
        // Initialisation des DLL pour l'utilisation des sockets
        WSADATA data;
        if(WSAStartup(MAKEWORD(2,2), &data) == SOCKET_ERROR) // retourne un code d'erreur en cas d'échec et 0 sinon
        {
            cout << "Erreur d'initialisation de la bibliothèque des Sockets" << endl;
            cout << "Code d'erreur : " << WSAGetLastError() << endl;
        }
     
        // Création de socket(adresse IP et Port, flux de transfert de donnée via réseau)
         SOCKET sock = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
         if(sock == INVALID_SOCKET)
         {
             cout << "Erreur de création de Socket" << endl;
             cout << "Code d'erreur : " << WSAGetLastError() << endl;
         }
     
         // Indexation du serveur auquel on doit se connecter
         sockaddr_in server;
         server.sin_addr.s_addr = inet_addr("127.0.0.1");
         server.sin_family = AF_INET;
         server.sin_port = htons(61111);
     
         // Connection au serveur
     
         while(connect(sock,(const sockaddr *)&server,sizeof(server)) == SOCKET_ERROR)
         {
             cout << "Impossible de se connecter au serveur" << endl;
             cout << "Code d'erreur : " << WSAGetLastError() << endl;
         }
         cout << "Connection réussi au port " << server.sin_port << endl;
     
         // Fermeture/Liberation du socket
         if(closesocket(sock) ==  SOCKET_ERROR)
         {
             cout << "Erreur de fermeture du Socket" << endl;
             cout << "Code d'erreur : " << WSAGetLastError() << endl;
         }
        if(WSACleanup() == SOCKET_ERROR) // retourne SOCKET_ERROR en cas d'erreur et 0 sinon
        {
            cout << "Erreur libération de la bibliothèque des Sockets" << endl;
            cout << "Code d'erreur : " << WSAGetLastError() << endl;
        }
     
        return 0;
    }
    Exéxution :

    Serveur :
    Nom : CaptureServeur.PNG
Affichages : 1782
Taille : 1,8 Ko

    Client :
    Nom : CaptureClient.PNG
Affichages : 1848
Taille : 5,9 Ko

    A noté que j'utilise CodeBlock 16.01 et Je suis sous Windows 8.1 64bits

  4. #4
    Rédacteur/Modérateur


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

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 147
    Billets dans le blog
    4
    Par défaut
    Le 2° paramètre de listen indique le nombre de connexion en attente possible.
    Je pense pas que la valeur de 0 soit très judicieuse.
    http://bousk.developpez.com/cours/re...iers-pas/#LI-B
    Ta structure utilisée pour bind n'est pas correcte non plus. inet_addr(INADDRANY); est faux.
    http://bousk.developpez.com/cours/re...iers-pas/#LI-A
    Vérifie que bind et listen ne retournent pas d'erreur.

    Dans les premiers chapitres je fournis une archive avec un code fonctionnel. Tu devrais y jeter un oeil.
    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.

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2016
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Octobre 2016
    Messages : 18
    Par défaut
    Solved perfect ! Merci. Il me faut me concentrer un peu plus ! Je m'y met corps et ame

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

Discussions similaires

  1. Socket error 10061
    Par h4mz4 dans le forum Débuter
    Réponses: 1
    Dernier message: 19/05/2010, 19h15
  2. Problème "socket error 10093"
    Par tougnon dans le forum Sécurité
    Réponses: 2
    Dernier message: 31/10/2006, 22h27
  3. Indy 'Socket error #10022'
    Par EntraX666 dans le forum Delphi
    Réponses: 2
    Dernier message: 13/08/2006, 18h20

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