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 :

Créer des sockets


Sujet :

C

  1. #1
    Membre chevronné
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    522
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 522
    Par défaut Créer des sockets
    Salut,

    Malgré la lecture de nombreuses docs sur la création de sockets, j'ai un peu de mal à m'en sortir. Ce n'est pas un problème de code mais d'environnement.

    J'ai juste récupéré un source très simple ici : http://c.developpez.com/WalrusSock/

    Ensuite, j'ai créé un nouveau projet sous Visual Studio avec ce code, j'ai compilé et je me tape l'erreur suivante :

    Error 1 error C2006: '#include' : expected a filename, found 'newline' c:\projects\p2wv2\solution1\test\test.c 1 Test
    Error 2 fatal error C1083: Cannot open include file: '': No such file or directory c:\projects\p2wv2\solution1\test\test.c 1 Test
    Vu que je viens du mode du web (java, dotnet), j'ai un peu de mal à comprendre l'origine du problème. Qq'un pour m'aider ?

    Merci d'avance.

  2. #2
    Expert confirmé
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Par défaut
    #include tout court ne veut rien dire. C'est #include <winsock2.h> qu'il fallait mettre. Voir aussi : Initiation à la programmation réseau sous Windows.

  3. #3
    Rédacteur
    Avatar de darrylsite
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 299
    Par défaut
    c'est pas un probleme de socket, mais des fichiers d'entete. Verifie les fichiers que tu as inclus dans le programme. Ou essaie de nous poster la partie #include de ton programme.

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Poste la ligne incriminée, s'il te plait.

    Edit: Wow, doublement doublé!
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  5. #5
    Membre chevronné
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    522
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 522
    Par défaut
    Des réponses rapides, je suis ravi

    Le code source, le voici (j'ai fait un copier/coller du tuto décrit dans le lien).

    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
     
    #include 
    #pragma comment(lib, "ws2_32.lib")
     
    void main()
    {
    WSADATA WSAData;
    WSAStartup(MAKEWORD(2,0), &WSAData);
    SOCKET sock;
    SOCKADDR_IN sin;
    char *buffer = new char[255];
    /* Tout est configuré pour se connecter sur IRC, haarlem, Undernet. */
    sock = socket(AF_INET, SOCK_STREAM, 0);
    sin.sin_addr.s_addr			= inet_addr("62.250.14.6");
    sin.sin_family				= AF_INET;
    sin.sin_port				= htons(6667);
    connect(sock, (SOCKADDR *)&sin, sizeof(sin));
    recv(sock, buffer, sizeof(buffer), 0);
    closesocket(sock);
    WSACleanup();
    }
    Suite à d'autres recherches, j'ai remplacé l'include qui posait problème par ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    #include <winsock2.h>
    L'erreur est maintenant différente :

    Error 1 error C2275: 'SOCKET' : illegal use of this type as an expression c:\projects\p2wv2\solution1\test\test.c 7 Test
    Il me manque une autre lib ?
    Je continue mes recherches de mon côté, merci pour votre aide.

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Descends la ligne avec WSAStartup() en-dessous des déclarations.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Hum... L'absence de <winsock2.h> me fait penser à un problème de balise HTML.
    ...Et après examen, c'est bien le cas: Le <winsock2.h> est bien dans le source de la page, mais directement, donc il est pris pour une mauvaise balise...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  8. #8
    Membre chevronné
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    522
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 522
    Par défaut
    Non, c'est good. Tu m'avais donné la bonne indication.

    En C, les déclarations sont obligatoirement avant les instructions ? Je ne savais pas.

    J'ai dû faire 1 modif encore. Voilà mon source final.
    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
     
    #include <winsock2.h>
    #pragma comment(lib, "ws2_32.lib")
     
    void main()
    {
    WSADATA WSAData;
    SOCKET sock;
    SOCKADDR_IN sin;
    char buffer[255];
     
    /* Tout est configuré pour se connecter sur IRC, haarlem, Undernet. */
    WSAStartup(MAKEWORD(2,0), &WSAData);
    sock = socket(AF_INET, SOCK_STREAM, 0);
    sin.sin_addr.s_addr			= inet_addr("62.250.14.6");
    sin.sin_family				= AF_INET;
    sin.sin_port				= htons(6667);
    connect(sock, (SOCKADDR *)&sin, sizeof(sin));
    recv(sock, buffer, sizeof(buffer), 0);
    closesocket(sock);
    WSACleanup();
     
    }
    Quand je l'exécute, rien ne se passe, mais ce n'était pas forcément le but. Je ne sais pas où pointe l'IP (le serveur doit être down depuis le temps !). Je voulais juste réussir à compiler un programme avec socket, c'est fait.

    Maintenant, je vais pouvoir avancer un peu plus.
    Merci beaucoup à tous ! Super rapide le forum C, c'était mon premier post dans cette techno

    A+

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Citation Envoyé par TekP@f Voir le message
    En C, les déclarations sont obligatoirement avant les instructions ? Je ne savais pas.
    Pour être précis, elles doivent être en début de bloc, et pas en début de fonction comme le disent certaines idées reçues.
    En clair, tu peux faire ça:
    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    void UneFonction(int toto)
    {
    	int a = TRUC;
    	if(toto != 0)
    	{
    		int b = MACHIN;
    		printf("%d\n", b);
    	}
    	printf("%d\n", a);
    }

    De plus, si tu utilises un compilateur qui respecte le "nouveau" standard C99 (en clair: Pas Visual), ou si tu programmes en C++, tu peux mettre les déclarations autre part qu'en début de bloc.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

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

Discussions similaires

  1. Créer une connexion entre 2 PC avec des sockets
    Par CLeBeR dans le forum VB.NET
    Réponses: 5
    Dernier message: 16/11/2011, 22h24
  2. Créer des sockets brutes
    Par zestyr dans le forum C
    Réponses: 9
    Dernier message: 10/04/2010, 23h06
  3. Créer un petit serveur TCP avec des Sockets ?
    Par UiYuki dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 25/09/2009, 09h31
  4. DirectDraw: Créer des surfaces 256 couleurs
    Par Magus (Dave) dans le forum DirectX
    Réponses: 5
    Dernier message: 14/10/2002, 22h28
  5. [CR] Est il possible de créer des univers avec Seagate Info?
    Par Frank dans le forum SAP Crystal Reports
    Réponses: 1
    Dernier message: 27/06/2002, 15h22

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