Probleme-> winsock2.h : Aucun fichier ou répertoire de ce type [Résolu]

emine88 2 Messages postés vendredi 19 septembre 2008Date d'inscription 11 octobre 2008 Dernière intervention - 10 oct. 2008 à 17:57 - Dernière réponse : cs_rt15 3982 Messages postés mardi 8 mars 2005Date d'inscription 7 novembre 2014 Dernière intervention
- 13 oct. 2008 à 10:44
Salut à tous
j'essaye de realiser un programme serveur/client en C++ sous Linux avec Kdevelop ,mon probleme est: au cours de la compilation sous console j'ai le message suivant :  " erreur: winsock2.h : Aucun fichier ou répertoire de ce type "
code source:

#include<stdio.h>
#include<winsock2.h>

void main()
{
int s;
sockaddr_in sa;
char buffer[255];
//creation de la socket
s=socket(AF_INET,SOCK_STREAM,0);
sa.sin.family=AF_INET;
sa.sin.port=hton(7777);
sa.sin_addr.s_addr=inet_addr("127.0.0.1");

//demande de connection au serveur
connect(s,(sockaddr*)&sa,sizeof(sa));

printf(" entrer un message \n ");
scanf("%s",buffer);

send(s,buffer,sizeof(buffer),0);
printf("message envoyé \n ");

closesocket(s);
}

sous conole :

[root@localhost TP 1]# gcc -o tcp-c client-tcp.c
client-tcp.c:3:21: erreur: winsock2.h : Aucun fichier ou répertoire de ce type
client-tcp.c: In function ‘main’:
client-tcp.c:8: erreur: ‘sockaddr_in’ undeclared (first use in this function)
client-tcp.c:8: erreur: (Each undeclared identifier is reported only once
client-tcp.c:8: erreur: for each function it appears in.)
client-tcp.c:8: erreur: expected ‘;’ before ‘sa’
client-tcp.c:11: erreur: ‘AF_INET’ undeclared (first use in this function)
client-tcp.c:11: erreur: ‘SOCK_STREAM’ undeclared (first use in this function)
client-tcp.c:12: erreur: ‘sa’ undeclared (first use in this function)
client-tcp.c:17: erreur: ‘sockaddr’ undeclared (first use in this function)
client-tcp.c:17: erreur: expected expression before ‘)’ token
client-tcp.c:6: attention : return type of ‘main’ is not ‘int’

  -comment je peut ajouter la bibliotheque winsock2.h
merci pour votre aide ! (y) ;)
Afficher la suite 

Votre réponse

3 réponses

Meilleure réponse
cs_rt15 3982 Messages postés mardi 8 mars 2005Date d'inscription 7 novembre 2014 Dernière intervention - 10 oct. 2008 à 19:37
3
Merci
Bienvenue !

Dans winsock, il y a win... Win ne te dis rien ?
Il est pourtant dans windows !

Bref, remplace ton include de winsock2.h par une include de socket.h.

Tu peux faire de la compilation conditionnelle si tu veux rendre le code portable.

Attention : il y a quelques différences entre les différents headers de socket... Autrement dit, tu risques d'avoir quand même des erreurs à la compilation. Mais tu pourras les corriger.

Merci cs_rt15 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 96 internautes ce mois-ci

Commenter la réponse de cs_rt15
emine88 2 Messages postés vendredi 19 septembre 2008Date d'inscription 11 octobre 2008 Dernière intervention - 11 oct. 2008 à 00:25
0
Merci
oui merci
j'ai remplacer  <winsock2.h> par <sys/socket.h> ,quelques erreurs sont apparu mais je les corrigées :
nouveau code source:

#include<stdio.h>
#include<sys/socket.h>
#include<netinet/in.h>

int  main()
{
int s;
struct sockaddr_in sa;
char buffer[255];
//creation de la socket
s=socket(AF_INET,SOCK_STREAM,0);
sa.sin_family=AF_INET;
sa.sin_port=htons(7777);
sa.sin_addr.s_addr=inet_addr("127.0.0.1");

//demande de connection au serveur
connect(s,(struct sockaddr*)&sa,sizeof(sa));

printf(" entrer un message \n ");
scanf("%s",buffer);
send(s,buffer,sizeof(buffer),0);
printf("message envoyé \n ");

//closesocket(s);
return 0;
}

le program fonctionne correctement ! merci bien ?
mais juste je veux savoire le rôle de la bibliotheque <netinet/in.h> ,si je compile sans cette bibliotheque je trouve:

[root@localhost TP 1]# gcc -o tcp-c client-tcp.c
client-tcp.c: In function ‘main’:
client-tcp.c:8: erreur: storage size of ‘sa’ isn’t known
[root@localhost TP 1]#

est ce que vous avez une explication plus détaillé ou plus profesionnelle et pour cette bibliotheque quelle est sont rôle ?
merci de mexplique je suis debutant en linux ! ;)
Commenter la réponse de emine88
cs_rt15 3982 Messages postés mardi 8 mars 2005Date d'inscription 7 novembre 2014 Dernière intervention - 13 oct. 2008 à 10:44
0
Merci
On ne parle pas vraiment de bibliothèque quand on parle d'un .h. Une bibliothèque c'est souvent plus gros. On parle plutôt de header, ou de fichier d'en-tête en français.

Ici :
struct sockaddr_in sa;

Tu déclares une structure de type sockaddr_in qui s'appelle sa.

Il se trouve que le header in.h du répertoire netinet contient la définition de ce type :
<hr />
/* Structure describing an Internet socket address.  */
struct sockaddr_in
  {
    __SOCKADDR_COMMON (sin_);
    in_port_t sin_port; /* Port number.  */
    struct in_addr sin_addr; /* Internet address.  */

    /* Pad to size of `struct sockaddr'.  */
    unsigned char sin_zero[sizeof (struct sockaddr) -
   __SOCKADDR_COMMON_SIZE -
   sizeof (in_port_t) -
   sizeof (struct in_addr)];
  };
<hr />
Si tu n'inclus pas ce header, le compilateur ne connais pas le type sockaddr_in et ne peut donc pas compiler ton programme.

Outre le type sockaddr_in, in.h contient des information diverses concernant les sockets, telles que les principaux ports, par exemple :
 IPPORT_TELNET = 23,

La taille sur laquelle est codée un numéro de port :
typedef uint16_t in_port_t;
(Les ports vont de 0 à 65535).

La taille représentant les adresses IP :
typedef uint32_t in_addr_t;
(Les adresses IP, représentée XXXX.XXXX.XXXX.XXXX sont codées sur 4 octets).

Je ne crois pas que le reste soit souvent utilisé, notamment la partie IPv6 (Presque tout le monde est encore en IPv4 à l'heure actuelle).
Commenter la réponse de cs_rt15

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.