Rechercher : dans
Par :

Probleme avec les sockets en C

Dernière réponse le 6 avr 2009 à 07:00:30 g33kzone, le 18 fév 2009 à 16:05:31 
 Signaler ce message aux modérateurs

Bonjour, je débute en C et je me suis récemment interressé aux socket (sous windows) , seulement il y a quelque chose que je ne comprends pas avec deux fonctions : send() et recv() dont voici le prototype :

int send(
__in SOCKET s,
__out char *buf,
__in int len,
__in int flags
);

int recv(
__in SOCKET s,
__out char *buf,
__in int len,
__in int flags
);

la fonction recv est sensé modifier le contenu de la variable buf à l'aide d'un pointeur seulement tous les appels de fonctions que j'ai vu jusqu'a présent dans les cours et exemples sur les sockets étaient faits de cette maniere :

recv(s,buf,sizeof(buf),0);

je ne comprends pas comment une fonction peux modifier le contenu d'une variable sans passer par un pointeur , pouvez vous m'éclaircir sur la question . Merci de votre aide

Configuration: Windows XP
Firefox 3.0.6

Meilleures réponses pour « probleme avec les sockets en C » dans :
Enlever ventirad socket A VoirProblème Je n'arrive pas à enlever le ventirad de mon processeur socket A. Solution Il y a un crochet sur un côté. Il faut appuyer avec le bout d'un tournevis plat, par exemple, sur le crochet pour le libérer. Merci à epango sur le forum...
La compilation et les modules en C et en C++ VoirCet article a pour vocation d'introduire les notions de bases de la compilation en C et en C++ et de la programmation modulaire. Il permet de mieux comprendre les messages d'erreur du compilateur. Les notions abordées ici sont indépendantes du...
[Langage C] C/C++ Erreur de segmentation VoirQu'est ce qu'une erreur de segmentation Vous êtes en train de développer une application sous Linux en C/C++. Tout va bien, ça compile, les oiseaux chantent. Donc vous lancez votre application pour la tester. Et vous obtenez l'un de ces deux...
Télécharger Visual C++ Express VoirVisual C++ Express est une version "gratuite" et allégée de Visual Studio ; l'utilisation requiert l'inscription sur le site de Microsoft. Cet environnement de développement permet de créer des application Win32 ou du .NET C.
Programmation réseau - Les sockets VoirIntroduction aux sockets La notion de sockets a été introduite dans les distributions de Berkeley (un fameux système de type UNIX, dont beaucoup de distributions actuelles utilisent des morceaux de code), c'est la raison pour laquelle on parle...
Les fonctions de l'API Socket VoirLes fonctions des sockets en détail La fonction socket() La création d'un socket se fait grâce à la fonction socket() : int socket(famille,type,protocole) famille représente la famille de protocole utilisé (AF_INET pour TCP/IP utilisant une...
Langage C++ - Les types de données VoirLes types de données Les données manipulées en langage C++, comme en langage C, sont typées, c'est-à-dire que pour chaque donnée que l'on utilise (dans les variables par exemple) il faut préciser le type de donnée, ce qui permet de connaître...

1

HackStyle, le 5 avr 2009 à 17:03:43

Euh... Si tu connais bien tes leçons sur le C, tu devrais savoir que si une variable tableau n'est pas suivis des crochets pour spécifier l'élément voulu, cette variable donne l'adresse du premier élément (0).

Ces codes sont strictement égaux :

recv(s,&buf[0],sizeof(&buf[0]),0); // On donne l'adresse du premier élément

recv(s,buf,sizeof(buf),0); // Pareil

Ciao ;).

Répondre à HackStyle

2

fiddy, le 5 avr 2009 à 19:42:06

A priori c'est toi qui connaît pas bien tes leçons de C ^^.

savoir que si une variable tableau n'est pas suivis des crochets pour spécifier l'élément voulu, cette variable donne l'adresse du premier élément (0).
Non. Il ne faut pas confondre avec le pointeur. Pour t'en convaincre :
Si tu as un tableau char buf[250];
sizeof buf, ça te renvoie 250
sizeof &buf[0], ça te renverra 4 (sur machine 32 bits).

Donc tes codes ne sont pas égaux du tout ;-)).
Google is your friend

Répondre à fiddy

3

fiddy, le 5 avr 2009 à 19:46:49

Salut,
En fait en C, même si tu mets le tableau, le compilateur remplacera par l'adresse de celui-ci. Dis autrement, le passage de tableaux se fait par adresse et non par copie contrairement aux variables classiques.
Voilà pourquoi la fonction peut modifier le contenu de ton tableau ;-)).
Google is your friend

Répondre à fiddy

4

 HackStyle, le 6 avr 2009 à 07:00:30

Voila ce qui arrive quand on utilise les notions avancés sans de solides bases mdr...

Ah ouais fiddy c'est exact ! le boulet que je suis, j'ai carement zappé ça moi !

J'ai verifier et c'est exacte, je suis sur que je vien de découvrire la source de 20% de mes problémes lol.

Aller ciao ! Merci pour la petite leçon que je zappé toujours concernant les tabs.

@++

EDIT: Désolé g33kzone pour ces fausses infos

Répondre à HackStyle