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 :

'sock' déclaré mais pas reconnu !


Sujet :

C++

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    193
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 193
    Par défaut 'sock' déclaré mais pas reconnu !
    Bonjour,
    j'ai rencontré un problème lors de la compilation de mon code.
    Je déclare un socket comme il faut dans un condition, et une fois la condition terminée j'appel une fonction ayant mon 'sock' comme parametre. Voici un schéma pour illustrer le problème (car le code est vraiment long et un peu tordu) :
    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
    fonction WinProc (...)
    {
     switch (message)
      {
       case fermer le programme :
       fermer;
       break;
     
       case appui sur le boutton:
       if (boutton 'se connecter')
        {
         définition d'un socket avec tout le trala;
        }
     
       if (bouton 'envoyer un message')
        {
         appel d'une fonction avec le socket défini dans le premier if comme parametre;
        }
        break;
       }
    }
    Le compilateur me dit : `sock' undeclared (first use this function)
    Comme si je ne l'avais pas déclaré, alors qu'il est bien déclaré quelques lignes au desus !
    Voila, merci d'avance pour votre aide.

  2. #2
    Membre Expert Avatar de gnto
    Homme Profil pro
    Ingénieur système logiciel
    Inscrit en
    Janvier 2006
    Messages
    923
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur système logiciel
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2006
    Messages : 923
    Par défaut
    Il manque du code, c'est difficile de répondre ou est déclaré sock ?

  3. #3
    Membre chevronné Avatar de Mayti4
    Inscrit en
    Février 2004
    Messages
    442
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 442
    Par défaut
    Ben oui, sock n'est connu que dans le corps de la condition 'se connecter'..

  4. #4
    Membre Expert Avatar de gnto
    Homme Profil pro
    Ingénieur système logiciel
    Inscrit en
    Janvier 2006
    Messages
    923
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur système logiciel
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2006
    Messages : 923
    Par défaut
    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
    fonction WinProc (...)
    {
     type socket;
     switch (message)
      {
       case fermer le programme :
       fermer;
       break;
     
       case appui sur le boutton:
       if (boutton 'se connecter')
        {
         définition d'un socket avec tout le trala;
        }
     
       if (bouton 'envoyer un message')
        {
         appel d'une fonction avec le socket défini dans le premier if comme parametre;
        }
        break;
       }
    }
    tu le déclare avant dans la portée de la méthode

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    193
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 193
    Par défaut
    Ca ne marche pas très bien.
    Voici la fonction WinProc :
    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
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    // Réception des messages
    LRESULT CALLBACK WinProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
    {
     
        SOCKET sock;	
        SOCKADDR_IN sin;
        WSADATA wsa; 
        WSAStartup(MAKEWORD(2,0),&wsa);
     
    switch (msg)
    {
    // Ferme le programme
    case WM_DESTROY:
    PostQuitMessage(0);
    break;
     
    // Reception des commandes
    case WM_COMMAND:
     
    // Détruit la fenètre si on clique sur le boutton quitter
    if((LOWORD(wParam) == ID_BUTTON_10) && (HIWORD(wParam) == BN_CLICKED))
    	DestroyWindow(hwnd);
     
    // Vérifie si on à cliquer sur le bouton Connexion
    if ((LOWORD(wParam) == ID_BUTTON_11) && (HIWORD(wParam) == BN_CLICKED))
    {
     
    // Va contenir le texte du EditBox
    char *Port = NULL;
     
    // Va contenir le nombres de caractères dans le EditBox
    unsigned int IPLen = 0;
    unsigned int PortLen = 0;
     
    // Récupère le nombre de caractères dans le EditBox
    IPLen = GetWindowTextLength(IPHandle);
    PortLen = GetWindowTextLength(PortHandle);
     
    // S'il n'est pas vide
    if (IPLen && PortLen)   
    {
     
    // Alloue de la mémoire pour stocker le texte
    IP = new char[(IPLen + 2)];
    Port = new char[(PortLen + 2)];
     
    // Récupère le texte
    IPLen = GetWindowText(IPHandle, IP, (IPLen + 1));
    PortLen = GetWindowText(PortHandle, Port, (PortLen + 1));
     
    // Conversion des variable char en int 
    IntPort = atoi(Port);
     
    // Si aucune erreur et le EditBox contient bien quelque chose
    if (IPLen && PortLen)
    {
    ////////////////////////////Connexion///////////////////////////////////
     
        sin.sin_family=AF_INET;
    	sin.sin_addr.s_addr=inet_addr(IP);
    	sin.sin_port=htons(IntPort);
     
    	sock=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
     
    	bind(sock,(SOCKADDR*)&sin,sizeof(sin));
     
    	if(connect(sock,(SOCKADDR*)&sin,sizeof(sin)))
    	{
    		MessageBox(MainHandle, "Erreur lors de la connexion.", "Erreur", MB_ICONERROR | MB_OK);
    		exit(0);
    	}
     
    ////////////////////////////////////////////////////////////////////////////////
    }
     
    if (!IPLen || !PortLen)
     {
      MessageBox(MainHandle, "Erreur lors de la récupération du texte", "Erreur", MB_ICONERROR | MB_OK);
     }
     
    if (!IPLen || !PortLen)
     {
      MessageBox(MainHandle, "Vous devez tout remplir.", "Erreur", MB_ICONERROR | MB_OK);
     }
     
    if((LOWORD(wParam) == ID_BUTTON_1) && (HIWORD(wParam) == BN_CLICKED))
        Connect(sock, 1);//Connect est la fonction qui envoit des strings au server
                         //le premier parametre est le socket et le second parametre indique la string à envoyer.
     
    if((LOWORD(wParam) == ID_BUTTON_2) && (HIWORD(wParam) == BN_CLICKED))
        Connect(sock, 2);
     
    if((LOWORD(wParam) == ID_BUTTON_3) && (HIWORD(wParam) == BN_CLICKED))
        Connect(sock, 3);
     
    }
     
    // Libère la mémoire
    delete [] IP;
    delete [] Port;
     
    break;
    }
     
    default: // Par default...
    return DefWindowProc(hwnd, msg, wParam, lParam);
    break;
     
    }
     
    return 0;
    }
    Voila. En déclarant le socket en dehors de la condition, on la rend effectivement accessible partout. La compilation marche, mais après ca ne fonctionne plus. Voici quand même la fonction Connect :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    ///////////Fonction qui envoit des strings à un ordi////////////////
    void Connect(SOCKET sock, int param)
    {
        char buffer[10];
     
        sprintf(buffer, "%ld", param);
        send(sock,buffer,sizeof(buffer),0);
    }
    ////////////////////////////////////////////////////////////////////////////////
    Merci pour votre aide.

  6. #6
    Membre chevronné Avatar de Mayti4
    Inscrit en
    Février 2004
    Messages
    442
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 442
    Par défaut
    SOCKET sock;
    Quand WinProc est appelé parceque tu veux envoyer une chaîne, sock ne vaut rien.

    Déclare sock static.

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    193
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 193
    Par défaut
    Ca ne marche toujours pas. J'ai essayé de mettre les autres SOCKADDR_IN sin et WSADATA wsa statics aussi mais pareil, aucune réaction...
    Il y autre chose à faire ?

  8. #8
    Membre chevronné Avatar de Mayti4
    Inscrit en
    Février 2004
    Messages
    442
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 442
    Par défaut
    Il y autre chose à faire ?
    Indenter ton code ? c'est pénible à lire.

    WSADATA wsa;
    WSAStartup(MAKEWORD(2,0),&wsa);
    Appeler WSAStartup une seule fois dans main suffit.
    if (IPLen && PortLen)
    {
    ...
    if (IPLen && PortLen)
    {
    Une seule fois suffit.

    bind(sock,(SOCKADDR*)&sin,sizeof(sin));
    Ne sert à rien.

    if (!IPLen || !PortLen)
    {
    MessageBox(MainHandle, "Erreur lors de la récupération du texte", "Erreur", MB_ICONERROR | MB_OK);
    }

    if (!IPLen || !PortLen)
    {
    MessageBox(MainHandle, "Vous devez tout remplir.", "Erreur", MB_ICONERROR | MB_OK);
    }
    Tu aimes bien te répéter apparemment.

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    193
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 193
    Par défaut
    ah oui désolé, j'ai pas mal de trucs comme ca mais bon mieux vaut répéter un code que de l'oublier !
    Bon OK maintenant j'ai un code plus propre. Mais...Ca ne fonctionne toujours pas !

  10. #10
    Membre chevronné Avatar de Mayti4
    Inscrit en
    Février 2004
    Messages
    442
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 442
    Par défaut
    Bon OK maintenant j'ai un code plus propre. Mais...Ca ne fonctionne toujours pas !
    Tu pourrais peut-être le poster alors ?

    Si tu avais bien indenté ton code, tu n'aurais pas ce problème.

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    193
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 193
    Par défaut
    Mouais....si j'enlève la ligne WSAStartup il n'y a même plus de connexion...je rappel que ces lignes sont indispensables...enfin à ce que j'ai compris.
    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
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    // Réception des messages
    LRESULT CALLBACK WinProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
    {
     
        static SOCKET sock;	
        SOCKADDR_IN sin;
        WSADATA wsa;
        WSAStartup(MAKEWORD(2,0),&wsa);  
     
    switch (msg)
    {
    // Ferme le programme
    case WM_DESTROY:
    PostQuitMessage(0);
    break;
     
    // Reception des commandes
    case WM_COMMAND:
     
    // Détruit la fenètre si on clique sur le boutton quitter
    if((LOWORD(wParam) == ID_BUTTON_10) && (HIWORD(wParam) == BN_CLICKED))
    	DestroyWindow(hwnd);
     
    // Vérifie si on à cliquer sur le bouton Connexion
    if ((LOWORD(wParam) == ID_BUTTON_11) && (HIWORD(wParam) == BN_CLICKED))
    {
     
    // Va contenir le texte du EditBox
    char *Port = NULL;
     
    // Va contenir le nombres de caractères dans le EditBox
    unsigned int IPLen = 0;
    unsigned int PortLen = 0;
     
    // Récupère le nombre de caractères dans le EditBox
    IPLen = GetWindowTextLength(IPHandle);
    PortLen = GetWindowTextLength(PortHandle);
     
    // S'il n'est pas vide
    if (IPLen && PortLen)   
    {
     
    // Alloue de la mémoire pour stocker le texte
    IP = new char[(IPLen + 2)];
    Port = new char[(PortLen + 2)];
     
    // Récupère le texte
    IPLen = GetWindowText(IPHandle, IP, (IPLen + 1));
    PortLen = GetWindowText(PortHandle, Port, (PortLen + 1));
     
    // Conversion des variable char en int 
    IntPort = atoi(Port);
     
     
    ////////////////////////////Connexion///////////////////////////////////
     
        sin.sin_family=AF_INET;
    	sin.sin_addr.s_addr=inet_addr(IP);
    	sin.sin_port=htons(IntPort);
     
    	sock=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
     
    	if(connect(sock,(SOCKADDR*)&sin,sizeof(sin)))
    	{
    		MessageBox(MainHandle, "Erreur lors de la connexion.", "Erreur", MB_ICONERROR | MB_OK);
    		exit(0);
    	}
     
    ////////////////////////////////////////////////////////////////////////////////
     
     
    if (!IPLen || !PortLen)
     {
      MessageBox(MainHandle, "Vous devez tout remplir.", "Erreur", MB_ICONERROR | MB_OK);
     }
     
    if((LOWORD(wParam) == ID_BUTTON_1) && (HIWORD(wParam) == BN_CLICKED))
        Connect(sock, 1);//Connect est la fonction qui envoit des strings au server
                         //le premier parametre est le socket et le second parametre indique la string à envoyer.
     
    if((LOWORD(wParam) == ID_BUTTON_2) && (HIWORD(wParam) == BN_CLICKED))
        Connect(sock, 2);
     
    if((LOWORD(wParam) == ID_BUTTON_3) && (HIWORD(wParam) == BN_CLICKED))
        Connect(sock, 3);
     
    }
     
    // Libère la mémoire
    delete [] IP;
    delete [] Port;
     
    break;
    }
     
    default: // Par default...
    return DefWindowProc(hwnd, msg, wParam, lParam);
    break;
     
    }
     
    return 0;
    }
    Et ca ne marche pas.

  12. #12
    Membre chevronné Avatar de Mayti4
    Inscrit en
    Février 2004
    Messages
    442
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 442
    Par défaut
    Citation Envoyé par The Lord of Nesquik
    Mouais....si j'enlève la ligne WSAStartup il n'y a même plus de connexion...
    Citation Envoyé par Mayti4
    Appeler WSAStartup une seule fois dans main suffit.
    // Vérifie si on à cliquer sur le bouton Connexion
    if ((LOWORD(wParam) == ID_BUTTON_11) && (HIWORD(wParam) == BN_CLICKED))
    {
    Regarde où est l'accolade fermante..

  13. #13
    Membre Expert Avatar de gnto
    Homme Profil pro
    Ingénieur système logiciel
    Inscrit en
    Janvier 2006
    Messages
    923
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur système logiciel
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2006
    Messages : 923
    Par défaut
    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
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    // Réception des messages
    LRESULT CALLBACK WinProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
    {
    
        static SOCKET sock;	
        SOCKADDR_IN sin;
        WSADATA wsa;
        WSAStartup(MAKEWORD(2,0),&wsa);  
        
        switch (msg)
        {
            // Ferme le programme
            case WM_DESTROY:
            PostQuitMessage(0);
        break;
    
        // Reception des commandes
        case WM_COMMAND:
                               
            // Détruit la fenètre si on clique sur le boutton quitter
            if((LOWORD(wParam) == ID_BUTTON_10) && (HIWORD(wParam) == BN_CLICKED))
                DestroyWindow(hwnd);
    
            // Vérifie si on à cliquer sur le bouton Connexion
            if ((LOWORD(wParam) == ID_BUTTON_11) && (HIWORD(wParam) == BN_CLICKED))
            {
    
                // Va contenir le texte du EditBox
                char *Port = NULL;
    
                // Va contenir le nombres de caractères dans le EditBox
                unsigned int IPLen = 0;
                unsigned int PortLen = 0;
    
                // Récupère le nombre de caractères dans le EditBox
                IPLen = GetWindowTextLength(IPHandle);
                PortLen = GetWindowTextLength(PortHandle);
    
                // S'il n'est pas vide
                if (IPLen && PortLen)   
                {
    
                    // Alloue de la mémoire pour stocker le texte
                    IP = new char[(IPLen + 2)];
                    Port = new char[(PortLen + 2)];
    
                    // Récupère le texte
                    IPLen = GetWindowText(IPHandle, IP, (IPLen + 1));
                    PortLen = GetWindowText(PortHandle, Port, (PortLen + 1));
            
                    // Conversion des variable char en int 
                    IntPort = atoi(Port);
    
    
                    ////////////////////////////Connexion///////////////////////////////////
                
                    sin.sin_family=AF_INET;
                    sin.sin_addr.s_addr=inet_addr(IP);
                    sin.sin_port=htons(IntPort);
                    
                    sock=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
    
                    if(connect(sock,(SOCKADDR*)&sin,sizeof(sin)))
                    {
                        MessageBox(MainHandle, "Erreur lors de la connexion.", "Erreur", MB_ICONERROR | MB_OK);
                        exit(0);
                    }
    
                    ////////////////////////////////////////////////////////////////////////////////
    
    
                    if (!IPLen || !PortLen) //tjrs faux puisque if (IPLen && PortLen)  
                    {
                        MessageBox(MainHandle, "Vous devez tout remplir.", "Erreur", MB_ICONERROR | MB_OK);
                    }
                    /**wParam ne peut changer puisque tu es dans le cas ou (LOWORD(wParam) == ID_BUTTON_11)*/
                    if((LOWORD(wParam) == ID_BUTTON_1) && (HIWORD(wParam) == BN_CLICKED))
                        Connect(sock, 1);//Connect est la fonction qui envoit des strings au server
                    //le premier parametre est le socket et le second parametre indique la string à envoyer.
            
                    if((LOWORD(wParam) == ID_BUTTON_2) && (HIWORD(wParam) == BN_CLICKED))
                        Connect(sock, 2);
              
                    if((LOWORD(wParam) == ID_BUTTON_3) && (HIWORD(wParam) == BN_CLICKED))
                        Connect(sock, 3);
    
                }
    
                // Libère la mémoire
                delete [] IP;
                delete [] Port;
    
                break;//break mal placé
            }
        break;
        default: // Par default...
            return DefWindowProc(hwnd, msg, wParam, lParam);
        break;
        }
        return 0;
    }
    Essaie d'indenter et fait des fonctions car mettre tout le code dans le winproc c'est plus difficile à lire et à debugger

  14. #14
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    193
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 193
    Par défaut
    Alors j'ai fais ca. Ca marche pour l'envoit des strings mais il y a un prob lors de la compilation. C'est dans les dernieres lignes, delete [] Port. C'est bisar parce que Port est déclaré en même temps que IP, qui ne plante pas...

    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
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    // Réception des messages
    LRESULT CALLBACK WinProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
    {
     
        static SOCKET sock;	
        SOCKADDR_IN sin;
        WSADATA wsa;
        WSAStartup(MAKEWORD(2,0),&wsa);  
     
    switch (msg)
    {
    // Ferme le programme
    case WM_DESTROY:
    PostQuitMessage(0);
    break;
     
    // Reception des commandes
    case WM_COMMAND:
     
    // Détruit la fenètre si on clique sur le boutton quitter
    if((LOWORD(wParam) == ID_BUTTON_10) && (HIWORD(wParam) == BN_CLICKED))
    	DestroyWindow(hwnd);
     
    // Vérifie si on à cliquer sur le bouton Connexion
    if ((LOWORD(wParam) == ID_BUTTON_11) && (HIWORD(wParam) == BN_CLICKED))
    {
     
    // Va contenir le texte du EditBox
    char *Port = NULL;
     
    // Va contenir le nombres de caractères dans le EditBox
    unsigned int IPLen = 0;
    unsigned int PortLen = 0;
     
    // Récupère le nombre de caractères dans le EditBox
    IPLen = GetWindowTextLength(IPHandle);
    PortLen = GetWindowTextLength(PortHandle);
     
    // S'il n'est pas vide
    if (IPLen && PortLen)   
    {
     
    // Alloue de la mémoire pour stocker le texte
    IP = new char[(IPLen + 2)];
    Port = new char[(PortLen + 2)];
     
    // Récupère le texte
    IPLen = GetWindowText(IPHandle, IP, (IPLen + 1));
    PortLen = GetWindowText(PortHandle, Port, (PortLen + 1));
     
    // Conversion des variable char en int 
    IntPort = atoi(Port);
     
    ////////////////////////////Connexion///////////////////////////////////
     
        sin.sin_family=AF_INET;
    	sin.sin_addr.s_addr=inet_addr(IP);
    	sin.sin_port=htons(IntPort);
     
    	sock=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
     
    	if(connect(sock,(SOCKADDR*)&sin,sizeof(sin)))
    	{
    		MessageBox(MainHandle, "Erreur lors de la connexion.", "Erreur", MB_ICONERROR | MB_OK);
    		exit(0);
    	}
     
    ////////////////////////////////////////////////////////////////////////////////
     
    }
     
    if (!IPLen || !PortLen)
     {
      MessageBox(MainHandle, "Vous devez tout remplir.", "Erreur", MB_ICONERROR | MB_OK);
     }
    }
     
    if((LOWORD(wParam) == ID_BUTTON_1) && (HIWORD(wParam) == BN_CLICKED))
        Connect(sock, 1);//Connect est la fonction qui envoit des strings au server
                         //le premier parametre est le socket et le second parametre indique la string à envoyer.
     
    if((LOWORD(wParam) == ID_BUTTON_2) && (HIWORD(wParam) == BN_CLICKED))
        Connect(sock, 2);
     
    if((LOWORD(wParam) == ID_BUTTON_3) && (HIWORD(wParam) == BN_CLICKED))
        Connect(sock, 3);
     
    if((LOWORD(wParam) == ID_BUTTON_4) && (HIWORD(wParam) == BN_CLICKED))
        Connect(sock, 4);
     
    if((LOWORD(wParam) == ID_BUTTON_5) && (HIWORD(wParam) == BN_CLICKED))
        Connect(sock, 5);
     
    if((LOWORD(wParam) == ID_BUTTON_6) && (HIWORD(wParam) == BN_CLICKED))
        Connect(sock, 6); 
     
    if((LOWORD(wParam) == ID_BUTTON_7) && (HIWORD(wParam) == BN_CLICKED))
        Connect(sock, 7);
     
    if((LOWORD(wParam) == ID_BUTTON_8) && (HIWORD(wParam) == BN_CLICKED))
        Connect(sock, 8);  
     
    // Libère la mémoire
    delete [] IP;
    // Normalement ici il y a le delete [] Port mais il plante à la compilation
    break;
     
    default: // Par default...
    return DefWindowProc(hwnd, msg, wParam, lParam);
    break;
     
    }
     
    return 0;
    }
    Bon sinon ca marche bien. Merci.

  15. #15
    Membre Expert Avatar de gnto
    Homme Profil pro
    Ingénieur système logiciel
    Inscrit en
    Janvier 2006
    Messages
    923
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur système logiciel
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2006
    Messages : 923
    Par défaut
    Quelle est l'erreur ? violation access ?

  16. #16
    Membre éprouvé
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    140
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 140
    Par défaut
    C'est à la compilation que çà plante ?
    Je pense que c'est plus à l'execution.

  17. #17
    Membre éprouvé
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    140
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 140
    Par défaut
    Rectification du message precedent c'est bien à la compilation que tu as une erreur.

    Port est définit dans un if alors que tu fais le delete à l'exterieur du if.

    De plus, je te conseil de mettre des accolades pour les cases sinon la definition des variables va te générer un warning.

  18. #18
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    193
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 193
    Par défaut
    Mais je ne comprends pas pourquoi la compilation plante au delete [] Port alors qu'elle ne dit rien pour le delete [] IP, en sachant que Port et IP sont déclarés en même temps.
    Si je supprime le delete [] Port, la compilation marche. Là tout se passe bien mais si je fais une certaine manip (appui sur un bouton après la connexion) j'ai effectivement un message d'erreur de violation d'acces (?!). Savez-vous pourquoi ? Bon bah sinon c'est tout, et l'envoit des strings marche bien par contre.
    Merci.

  19. #19
    Membre éprouvé
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    140
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 140
    Par défaut
    Salut,

    Je ne vois pas la déclaration de IP
    J'ai bien celle de Port

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    // Va contenir le texte du EditBox
    char *Port = NULL;
    Avec l'indentation tu peux voir

    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
    // Vérifie si on à cliquer sur le bouton Connexion
    if ((LOWORD(wParam) == ID_BUTTON_11) && (HIWORD(wParam) == BN_CLICKED))
    {
    
         // Va contenir le texte du EditBox
         char *Port = NULL;
         ....
    
         // S'il n'est pas vide
         if (IPLen && PortLen)   
         {
    
              // Alloue de la mémoire pour stocker le texte
              IP = new char[(IPLen + 2)];
              ....
         }
         ....
    } // Ici Port n'existe plus
    
    // Libère la mémoire
    delete [] IP; 
    // Si on n'est pas passé dans le if (IPLen && PortLen) alors IP n'est pas alloué donc plantage à l'execution
    // Normalement ici il y a le delete [] Port mais il plante à la compilation
    // => Pb à la compilation car Port n'existe pas

  20. #20
    Membre Expert Avatar de gnto
    Homme Profil pro
    Ingénieur système logiciel
    Inscrit en
    Janvier 2006
    Messages
    923
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur système logiciel
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2006
    Messages : 923
    Par défaut
    Citation Envoyé par mdevlieg
    De plus, je te conseil de mettre des accolades pour les cases sinon la definition des variables va te générer un warning.
    Ah ? t'es sur de toi pour les accolades sur les case ?

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 9
    Dernier message: 13/05/2008, 02h59
  2. [getElementById] Id reconnu par CSS mais pas par getElementById
    Par Hibou57 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 22/07/2007, 08h47
  3. [MySQL] champ déclaré mais pas reconnu
    Par Purple Haze dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 28/02/2007, 15h43
  4. Fiche créée mais pas reconnue par l'application ??
    Par Leesox dans le forum Langage
    Réponses: 8
    Dernier message: 30/10/2005, 15h10
  5. Clé usb reconnue mais pas en scsi
    Par Tefonline dans le forum Matériel
    Réponses: 3
    Dernier message: 18/04/2004, 20h29

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