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++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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 : 42
    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 : 42
    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.

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

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