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 :

Utilisation des sockets sous Windows (VISTA)


Sujet :

Réseau C

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    2
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 2
    Points : 2
    Points
    2
    Par défaut Utilisation des sockets sous Windows (VISTA)
    Bonjour à tous,

    Après avoir cherché pas mal sur le net pour résoudre les problèmes de librairies non trouvées par Windows pour pouvoir utiliser les sockets correctement en C, je ne comprend toujours pas pourquoi certains paramêtres n'arrivent pas à être trouvé

    Voila les librairies incluses dans mon programme C :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    #include <stdio.h>
    #include <stdlib.h>
    #include <windows.h>
     
    #include <winsock2.h>
    #include <process.h>
    J'ai trouvé que les sockets sous windows sont géré via la librairie winsock2.h (winsock.h pour UNIX). La librairie process.h permettrait quant à elle d'éviter l'utilisation de netdb.h (n'étant pas reconnu sous WIN).

    Pourtant lorsque je compile mon code, j'ai le droit à 4 belles erreurs pour mon client :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    C:\Users\KLaSH\Desktop\client.o:client.c:(.text+0x42)||undefined reference to `_gethostbyname@4'|
    C:\Users\KLaSH\Desktop\client.o:client.c:(.text+0x84)||undefined reference to `_htons@4'|
    C:\Users\KLaSH\Desktop\client.o:client.c:(.text+0xd8)||undefined reference to `_socket@12'|
    C:\Users\KLaSH\Desktop\client.o:client.c:(.text+0x11c)||undefined reference to `_connect@12'|
    ||=== Build finished: 4 errors, 0 warnings ===|

    Et du côté serveur, j'ai 5 belles erreurs du même type :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    C:\Users\KLaSH\Desktop\server.o:server.c:(.text+0x69)||undefined reference to `_htons@4'|
    C:\Users\KLaSH\Desktop\server.o:server.c:(.text+0x99)||undefined reference to `_socket@12'|
    C:\Users\KLaSH\Desktop\server.o:server.c:(.text+0xdd)||undefined reference to `_bind@12'|
    C:\Users\KLaSH\Desktop\server.o:server.c:(.text+0x112)||undefined reference to `_listen@8'|
    C:\Users\KLaSH\Desktop\server.o:server.c:(.text+0x15d)||undefined reference to `_accept@12'|
    ||=== Build finished: 5 errors, 0 warnings ===|
    Aurais-je oublier l'utilisation d'une librairie ?


    Merci beaucoup de votre aide.

    Cordialement,

    BOUCHE Benjamin

  2. #2
    Membre averti

    Inscrit en
    Juillet 2008
    Messages
    186
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 186
    Points : 350
    Points
    350
    Par défaut
    Bonjour,

    Ce ne sont pas des erreurs de compilation, mais des erreurs de link. Il faut ajouter des options au linker afin de lui dire les librairies que tu veux lier à ton programme.

    Didier

  3. #3
    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 Linoux Voir le message
    Aurais-je oublier l'utilisation d'une librairie ?
    En admettant que tu veuilles dire 'bibliothèque', oui. Il faut ajouter ws2_32 au projet, soit ws2_32.lib avec Visual C++ ou libws2_32.a avec MinGW (Code::Blocks etc.).

    http://emmanuel-delahaye.developpez.com/reseaux.htm

    J'ai trouvé que les sockets sous windows sont géré via la librairie winsock2.h (winsock.h pour UNIX).
    1 - <winsock2.h> et <winsock.h> ne sont ni des libraries, ni des bibliothèques, mais des fichiers d'en-tête. C'est ce genre de confusion qui fait que tu ne comprends pas ton erreur.
    2 - <winsock.h> concerne les anciennes sockets de Windows (version 1.x)
    3 - <winsock2.h> concerne les sockets actuelles de Windows (version 2.x) très compatibles avec les sockets POSIX.1.

  4. #4
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 381
    Points : 41 582
    Points
    41 582
    Par défaut
    Citation Envoyé par Emmanuel Delahaye Voir le message
    3 - <winsock2.h> concerne les sockets actuelles de Windows (version 2.x) très compatibles avec les sockets POSIX.1.
    Mais qui pourtant, sont déclarées avec des char*, pour des raisons qui m'échappent complètement (vu que même sous POSIX elles utilisent void*!)...

  5. #5
    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 Médinoc Voir le message
    Mais qui pourtant, sont déclarées avec des char*, pour des raisons qui m'échappent complètement (vu que même sous POSIX elles utilisent void*!)...
    Purée, j'avais pas remarqué. C'est un peu horrible, car en binaire, on préfère utiliser un unsigned char. Il me semble avoir essayé récemment, et ça ne couine pas... Je me demande si la doc et le prototype sont en conformité...

    En tout cas, MinGW est conforme à la spec de Windows :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    ----------------------------------------
    Recherche de 'send' dans 'C:\Program Files\CodeBlocks\MinGW\include\signal.h' :
    C:\Program Files\CodeBlocks\MinGW\include\signal.h(64):  * used to send a signal to the default handler (SIG_DFL), ignore
    Trouvé 'send' 1 fois.
    ----------------------------------------
    Recherche de 'send' dans 'C:\Program Files\CodeBlocks\MinGW\include\winsock.h' :
    C:\Program Files\CodeBlocks\MinGW\include\winsock.h(447): int PASCAL send(SOCKET,const char*,int,int);
    Trouvé 'send' 1 fois.
    ----------------------------------------
    Recherche de 'send' dans 'C:\Program Files\CodeBlocks\MinGW\include\winsock2.h' :
    C:\Program Files\CodeBlocks\MinGW\include\winsock2.h(549): WINSOCK_API_LINKAGE int PASCAL send(SOCKET,const char*,int,int);
    Trouvé 'send' 1 fois.
    Recherche effectuée, trouvé 'send' 3 fois. (3 fichier(s)).
    D'un autre coté, ça dissuade de passer directement des adresses de variables autres que char, ce qui est une Bonne Chose...

  6. #6
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 381
    Points : 41 582
    Points
    41 582
    Par défaut
    Visual aussi:
    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    WINSOCK_API_LINKAGE
    int
    WSAAPI
    send(
        IN SOCKET s,
        IN const char FAR * buf,
        IN int len,
        IN int flags
        );

Discussions similaires

  1. Développer des applications sous Windows Vista
    Par Louis-Guillaume Morand dans le forum Général Dotnet
    Réponses: 0
    Dernier message: 19/04/2009, 09h03
  2. Redimensionner des partitions sous windows VISTA?
    Par quaresma dans le forum Administration
    Réponses: 3
    Dernier message: 11/06/2008, 11h46
  3. Problème d'affichage dans des TScrollBox sous Windows Vista
    Par ILPlais dans le forum Composants VCL
    Réponses: 1
    Dernier message: 28/05/2008, 10h09
  4. utilisation des sockets sous delphi8
    Par sincère dans le forum Delphi .NET
    Réponses: 5
    Dernier message: 21/07/2007, 22h09
  5. utilisation des sockets sous windows
    Par Tupac dans le forum Réseau
    Réponses: 2
    Dernier message: 21/12/2002, 18h24

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