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 :

Programmation des sockets


Sujet :

Réseau C

  1. #1
    Membre du Club
    Inscrit en
    Juin 2006
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 94
    Points : 50
    Points
    50
    Par défaut Programmation des sockets
    Bonjour,

    Je suis en train de réaliser une application en C avec le logiciel Eclipse, qui permette d'arrêter ou redémarrer à distance des ordinateurs.

    J'ai commencé par créer une socket mais j'ai plusieurs erreurs que je n'arrive pas à résoudre.

    Voici le début de mon codec:

    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
     
     
    #include <winsock2.h> // pour les fonctions socket
    #include <stdio.h> // Pour les Sprintf
     
     
    // ********************************************************
    // Les librairies
    // ********************************************************
    #pragma comment(lib,"ws2_32.lib")
     
    // ********************************************************
    // Définition des variables
    // ********************************************************
    WSADATA wsadata; // Variable permettant de récupérer la structure d'information sur l'initialisation
    int erreur; // Variable permettant de récupérer la valeur de retour des fonctions utilisées
    int tempo; // Variable temporaire de type int
    int nombre_de_caractere; // Indique le nombre de caractères qui a été reçu ou envoyé
    char buffer[65535]; // Tampon contennant les données reçues ou envoyées
    SOCKET sock; // Identifiant de la socket
    SOCKADDR_IN dest; // Déclaration de la structure des informations lié au serveur
     
    int main (int argc, char* argv[])
    {
          printf("\nBonjour, vous etes du cote client. \n");
     
          // ********************************************************
          // Initialisation de Winsock
          // ********************************************************
          erreur=WSAStartup(MAKEWORD(2,0),&wsadata);// On dit à l'ordinateur que l'on va utiliser des sockets
          if (erreur!=0)
                printf("\nDesole, je ne peux pas initialiser Winsock du a l'erreur : %d %d",erreur,WSAGetLastError());
          else
                printf("\nWSAStartup  : OK");
    Il me dit d'abord : "attention: #pragma comment ignore".
    Puis il me dit : "reference indefinie vers <<_WSASTARTUP@8>>"

    Il me fait ce genre d'erreurs pour toutes fonctions que j'utilise (socket, connect, ...).

    Si quelqu'un sait d'où viennent ces erreurs, cela m'aiderait énormément!

  2. #2
    Membre régulier Avatar de telliam
    Inscrit en
    Octobre 2006
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 63
    Points : 71
    Points
    71
    Par défaut
    Citation Envoyé par loreleï85
    Bonjour,

    Je suis en train de réaliser une application en C avec le logiciel Eclipse, qui permette d'arrêter ou redémarrer à distance des ordinateurs.

    J'ai commencé par créer une socket mais j'ai plusieurs erreurs que je n'arrive pas à résoudre.

    Voici le début de mon codec:

    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
     
     
    #include <winsock2.h> // pour les fonctions socket
    #include <stdio.h> // Pour les Sprintf
     
     
    // ********************************************************
    // Les librairies
    // ********************************************************
    #pragma comment(lib,"ws2_32.lib")
     
    // ********************************************************
    // Définition des variables
    // ********************************************************
    WSADATA wsadata; // Variable permettant de récupérer la structure d'information sur l'initialisation
    int erreur; // Variable permettant de récupérer la valeur de retour des fonctions utilisées
    int tempo; // Variable temporaire de type int
    int nombre_de_caractere; // Indique le nombre de caractères qui a été reçu ou envoyé
    char buffer[65535]; // Tampon contennant les données reçues ou envoyées
    SOCKET sock; // Identifiant de la socket
    SOCKADDR_IN dest; // Déclaration de la structure des informations lié au serveur
     
    int main (int argc, char* argv[])
    {
          printf("\nBonjour, vous etes du cote client. \n");
     
          // ********************************************************
          // Initialisation de Winsock
          // ********************************************************
          erreur=WSAStartup(MAKEWORD(2,0),&wsadata);// On dit à l'ordinateur que l'on va utiliser des sockets
          if (erreur!=0)
                printf("\nDesole, je ne peux pas initialiser Winsock du a l'erreur : %d %d",erreur,WSAGetLastError());
          else
                printf("\nWSAStartup  : OK");
    Il me dit d'abord : "attention: #pragma comment ignore".
    Puis il me dit : "reference indefinie vers <<_WSASTARTUP@8>>"

    Il me fait ce genre d'erreurs pour toutes fonctions que j'utilise (socket, connect, ...).

    Si quelqu'un sait d'où viennent ces erreurs, cela m'aiderait énormément!
    tu dois avoir des problemes au moment du link final de ton application,
    il doit te manquer une reference vers une librairie dans ta ligne de compilation

  3. #3
    Membre du Club
    Inscrit en
    Juin 2006
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 94
    Points : 50
    Points
    50
    Par défaut
    Mais quelles librairies je dois inclure?

  4. #4
    Membre régulier Avatar de telliam
    Inscrit en
    Octobre 2006
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 63
    Points : 71
    Points
    71
    Par défaut
    Citation Envoyé par loreleï85
    Mais quelles librairies je dois inclure?
    socket ou winsock ou un truc du genre je pense

  5. #5
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Points : 5 360
    Points
    5 360
    Par défaut
    Citation Envoyé par loreleï85
    Mais quelles librairies je dois inclure?
    Si Eclipse utilise le compilateur gcc de MinGW32, je crois qu'il faut inclure une option telle que -lws2_32 à l'édition des liens (à confirmer!). Il me semble avoir lu un post traîtant de ce problème il y a peu de temps sur ce forum. Une recherche avec winsock2 devrait t'aider à retrouver l'information.

    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

  6. #6
    Membre du Club
    Inscrit en
    Juin 2006
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 94
    Points : 50
    Points
    50
    Par défaut
    Merci pour vos réponses, je me pencherai sur ce problème demain!

  7. #7
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par loreleï85
    Il me dit d'abord : "attention: #pragma comment ignore".
    Puis il me dit : "reference indefinie vers <<_WSASTARTUP@8>>"
    A condition de terminer la fonction main(), ton code fonctionne bien !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Bonjour, vous etes du cote client.
     
    WSAStartup  : OK
    Press ENTER to continue.
    Pour fonctionner, une application Windows utilisant les sockets doit être liée avec la bibliothèque qui va bien. Avec MinGW (gcc) c'est libws2_32.a. Pour ça, il faut indiquer à ton IDE où se trouve cette bibliothèque (C::B : settings > compiler > directories > linker) et ajouter ws2_32 dans la liste des bibliothèques (C::B : settings > compiler > linker > libraries)

    Le pragma vient sans doute d'une abomination à-la-Microsoft qu'il vaut mieux oublier... Supprime le et tu n'auras plus le warning.
    Pas de Wi-Fi à la maison : CPL

  8. #8
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par telliam
    socket ou winsock ou un truc du genre je pense
    Si on ne sait pas, on ne dit rien. On écoute et on apprend.
    Pas de Wi-Fi à la maison : CPL

  9. #9
    Membre du Club
    Inscrit en
    Juin 2006
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 94
    Points : 50
    Points
    50
    Par défaut
    J'utilise Cygwin. Comment est-ce que je dois indiquer a mon EDI quelle bibliothèque utiliser? (Je n'ai pas trop compris comment faire)

  10. #10
    Membre du Club
    Inscrit en
    Juin 2006
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 94
    Points : 50
    Points
    50
    Par défaut
    En fait c'est bon j'ai trouvé! J'ai réussi à inclure la librairie, j'ai enlevé le #pragma, et ça marche!

    Merci beaucoup pour votre aide!

  11. #11
    Membre du Club
    Inscrit en
    Juin 2006
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 94
    Points : 50
    Points
    50
    Par défaut
    En fait il me dit maintenant qu'il ne peut pas trouver la librairie -lws2_32.lib.
    Je ne sais pas quoi faire...

  12. #12
    Membre régulier Avatar de telliam
    Inscrit en
    Octobre 2006
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 63
    Points : 71
    Points
    71
    Par défaut
    Citation Envoyé par loreleï85
    En fait il me dit maintenant qu'il ne peut pas trouver la librairie -lws2_32.lib.
    Je ne sais pas quoi faire...
    -lws2_32 vire le .lib

  13. #13
    Membre du Club
    Inscrit en
    Juin 2006
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 94
    Points : 50
    Points
    50
    Par défaut
    Merci, cela fonctionne!

    Maintenant il me reste une erreur que je ne comprend pas...
    Il me dit : controle a atteint la fin non void de la fonction

    Qu'est-ce que cela signifie?

  14. #14
    Membre du Club
    Inscrit en
    Juin 2006
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 94
    Points : 50
    Points
    50
    Par défaut
    C'est bon en fait, c'est juste que j'avais oublié le return 0!

    Merci beaucoup de votre aide!

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

Discussions similaires

  1. La programmation des sockets bruts sous Windows
    Par Melem dans le forum Articles
    Réponses: 4
    Dernier message: 18/04/2016, 16h15
  2. xcode et programmation des sockets
    Par ouafae2011 dans le forum C
    Réponses: 0
    Dernier message: 20/05/2012, 18h51
  3. Programme avec des sockets
    Par Javabad dans le forum Réseau
    Réponses: 3
    Dernier message: 24/01/2011, 14h12
  4. programmation des sockets
    Par pedatic dans le forum Linux
    Réponses: 2
    Dernier message: 16/06/2009, 13h27
  5. probleme avec le proxy (programmation des Socket)
    Par andyinfo dans le forum Développement Web en Java
    Réponses: 3
    Dernier message: 12/05/2009, 23h05

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