Recv() et du brol

cs_epoc Messages postés 87 Date d'inscription mardi 28 mai 2002 Statut Membre Dernière intervention 25 octobre 2006 - 30 août 2003 à 17:12
cs_aardman Messages postés 1905 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 17 septembre 2012 - 30 août 2003 à 19:04
hum... encore moi!

g un petit prob avec la fonction recv() ou send(), je c pas trop.

dans mon client j'ai ça :

char *buffer = new char[1024];

buffer="NEW MSG";
if(send(sock,buffer,strlen(buffer),0)!=0){
m_Edit.GetWindowText(recup);
m_Edit.SetWindowText(recup+"# Message envoyé\r\n");
}
else{
...
}

dans mon serveur j'ai ça :

char *recvbuffer = new char[1024];

if(recv(ClientSocket, recvbuffer, strlen(recvbuffer), 0) != SOCKET_ERROR){
AfxMessageBox(recvbuffer);
}

en gros dans ma message box j'aurai NEW MSG et une chiée de caratères à la suite.

Si qqun avait encore la patiente de m'expliquer ça serait bien sympa.

merci

++

8 réponses

cs_aardman Messages postés 1905 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 17 septembre 2012 3
30 août 2003 à 17:21
Salut,
Dans ton appel recv() il faut passer la taille du buffer de reception en 3eme argument, toi tu as utilisé strlen, et comme ton buffer est vide, ca doit retourner 0.
Essaye plutot:
recv(ClientSocket, recvbuffer, sizeof(char[1024]), 0);
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
30 août 2003 à 17:22
buffer="NEW MSG"; ????
tu changes l'adresse du buffer, pourquoi ?
Le mfc fait vraiment des degats dans les neurones.
strcpy(buffer, "NEW MSG");
BruNews, ciao...
0
cs_epoc Messages postés 87 Date d'inscription mardi 28 mai 2002 Statut Membre Dernière intervention 25 octobre 2006
30 août 2003 à 17:59
quand je mets strlen j'ai ça :
NEW MSGÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ... bien loin

quand je mets sizeof j'ai ça :

NEW ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ...
MSGÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ...

soit 2 messages à la place d'un.
0
cs_aardman Messages postés 1905 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 17 septembre 2012 3
30 août 2003 à 18:10
C'est a cause de tes alloc bizzares ca...
dans le serveur et le client declare ton buffer comme ca:
char buffer[1024]; // simple tableau de char
Utilise strcpy() pour remplir ton buffer dans le client.

dans le client: send() avec strlen() en 3eme argument,
dans le serveur: recv() avec sizeof() en 3eme argument.

La ca devrait marcher.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_epoc Messages postés 87 Date d'inscription mardi 28 mai 2002 Statut Membre Dernière intervention 25 octobre 2006
30 août 2003 à 18:23
c'est ce que j'avais lors de mon dernier message, ça me donne ça :

> > NEW ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ...
> > MSGÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ...

en fait il découpe mon message tous les 4 caractères, jai essayé avec un message plus long.

donc ca ne marche toujours pas :-/
0
cs_aardman Messages postés 1905 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 17 septembre 2012 3
30 août 2003 à 18:37
Tu lis mes messages a moitier ...

On reprend:
si tu declare ton buffer comme ca:
char *buffer = new char[1024];

et que tu fais strlen(buffer), cela te retourne 4.
Voila pourquoi tu recois 2 paquets de 4 octets.

Maintenant, si tu declares ton buffer je t'ai dis:
char buffer[1024];
et que tu passe strlen(buffer)+1 en 3eme argument de send() (javais oublié le +1 dans mon precedent post) cela retourne le nombre d'octet de la chaine + le caractere null.

Et la ca marche.
0
cs_epoc Messages postés 87 Date d'inscription mardi 28 mai 2002 Statut Membre Dernière intervention 25 octobre 2006
30 août 2003 à 19:01
ok ça marche. J'ai déclaré char recvbuffer[1024]; pour la fonction recv() et send() et avec le +1 tout fonctionne nickel.

Encore un grand merci!

En fait, tu travailles dans le développement?
0
cs_aardman Messages postés 1905 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 17 septembre 2012 3
30 août 2003 à 19:04
Salut,
non, je suis lycéen.
Content que ca marche.
0
Rejoignez-nous