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

MFC Discussion :

Question sur les fonctions "send()" et "recv(


Sujet :

MFC

  1. #1
    Membre confirm�
    Profil pro
    Inscrit en
    D�cembre 2005
    Messages
    227
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : D�cembre 2005
    Messages : 227
    Par d�faut Question sur les fonctions "send()" et "recv(
    Salut,

    J'ai une question th�orique � vous poser :

    Pour recevoir une chaine char* avec les sockets on utilise :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    recv(SOCKET, char* , int, int);
    Je voudrait savoir ce qui se passe si la taille indiqu�e (3�me param�tre) d�passe la taille de la chaine qui se trouve dans le tampon de reception.

    Est ce que dans ce cas �a ne peut pas recup�rer une partie de la chaine suivante : Ou est ce que la fonction recv() arr�te de recevoir les carct�res lorsqu'elle rencontre un 0 (caract�re nul).

    Par exemple :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    send(csock,"coucou!!",9,0);  //envoi de la chaine1
    send(csock,"ça va?",7,0);     //envoi de la chaine2
     
    //la reception se fait une fois que les 2 chaines ont été envoyées
     
    recv(sock,buffer,11,0);   //le buffer reçoit : 
    // "coucou!!\0ça"
    // "coucou!!\0(+2caractères quelconque)"
    // ou juste "coucou!!\0" ???
     
    recv(sock,buffer,7,0);    //le buffer reçoit : 
    //la suite de la chaine2 (" va?\0(+2caractères quelconque)"
    //" va?"
    // ou juste "ça va?"  ???
    Merci de r�pondre a mes questions

  2. #2
    Expert �minent
    Avatar de M�dinoc
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    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 397
    Par d�faut
    Ben, on dirait bien que �a d�pend de la mani�re dont le tout est configur� et/ou impl�ment�...

    Sur certains syst�mes, par exemple, si tu envoies des donn�es en deux parties, tu ne peux pas les recevoir en une seule fois (J'avais vu �a sur un vieux FreeBSD)

    Par contre, l'inverse est possible (en tout cas sous Windows) : Tu peux envoyer des donn�es en une fois et les recevoir en deux parties. � ce moment-l�, une bonne id�e est d'envoyer [taille+cha�ne] et de recevoir d'abord la taille, puis utiliser la taille pour recevoir la cha�ne...
    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.

  3. #3
    Membre confirm�
    Profil pro
    Inscrit en
    D�cembre 2005
    Messages
    227
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : D�cembre 2005
    Messages : 227
    Par d�faut
    Ca c'est pas mal ce truc de recevoir une chaine en 2 fois, mais d'abord je voudrait m'assurer que cette fa�on est fiable et que �a marche avec toutes les versions de Windows.

    Si quelqu'un connait bien les sockets et qu'il veut bien me renseigner...�a serait sympa

    Merci d'avance

  4. #4
    R�dacteur
    Avatar de farscape
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes C�te d'Azur)

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par d�faut
    la m�thode de reception en 2 parties cit�e plus haut fonctionne ,je l'utilise .
    tu as peut etre interet aussi a desactiver l'algorithme Nagle voir le flag TCP_NODELAY .


  5. #5
    Membre confirm�
    Profil pro
    Inscrit en
    D�cembre 2005
    Messages
    227
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : D�cembre 2005
    Messages : 227
    Par d�faut
    Citation Envoy� par farscape
    tu as peut etre interet aussi a desactiver l'algorithme Nagle voir le flag TCP_NODELAY .
    C'est quoi "l'algorithme Nagle" et le "flag TCP_NODELAY" : Ca fait quoi, comment on les desactive :

  6. #6
    R�dacteur
    Avatar de farscape
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes C�te d'Azur)

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par d�faut
    voir MSDN:
    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/randz/protocol/nagle_algorithm.asp
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
     
    long one=1;
    setsockopt(socket,IPPROTO_TCP,TCP_NODELAY,(char *)&one,sizeof(one));

  7. #7
    Membre confirm�
    Profil pro
    Inscrit en
    D�cembre 2005
    Messages
    227
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : D�cembre 2005
    Messages : 227
    Par d�faut
    Je vois pas bien pourquoi il faut d�sactiver l'algorithme Nagle c'est plut�t pour envoyer des courte chaine qu'il faudrait le d�sactiver non ?

    Par exemple je peut tr�s bien envoyer un cette chaine :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    sprintf(buffer,"%c%cVoila une chaine.",int long1,int long2);
    // long1 et long2 (nombre de 2 octets) indiquent la taille de la chaine qui va suivre
    send(sock,buffer,20,0);
    //la on met la taille réelle que l'on peut forcément connaitre
    Par contre du cot� de la reception on ne connait pas la taille de la chaine que l'on va recevoir :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    recv(csock,buffer_recep,2,0);
    //on recoit juste les 2 premiers octets on, puis utilise une procédure pour les transformer en un int
    recv(csock,buffer_recep,int taille,0);
    //int taille correspond au nombre que l'on a indiqué juste avant avec la procédure.
    Ce code devrait marcher sans d�sactiver l'algorithme Nagle non :

    EDIT : J'ai fait comme j'expliquais ci-dessus et j'ai pas eu besoin de desactiver l'algorithme Nagle. En fait le truc c'est si j'envoyais la chaine en 2 fois qu'il faudrait le desactiver mais par contre on peut tr�s bien recevoir une chaine en 2 fois sans le d�sactiver.

Discussions similaires

  1. Question sur les fonctions virtuelles
    Par beegees dans le forum C++
    R�ponses: 9
    Dernier message: 13/04/2008, 19h54
  2. question sur les fonctions pass�es � GLUT
    Par Plomeg dans le forum GLUT
    R�ponses: 3
    Dernier message: 09/02/2008, 13h58
  3. Diverses questions sur les fonctions de conversion
    Par Louis-Guillaume Morand dans le forum Access
    R�ponses: 12
    Dernier message: 27/12/2006, 10h56
  4. Question sur les fonctions ORACLE
    Par Fakhry dans le forum SQL
    R�ponses: 8
    Dernier message: 12/12/2006, 17h13
  5. [Dates] Question sur les fonctions Date
    Par cerede2000 dans le forum Langage
    R�ponses: 2
    Dernier message: 28/10/2006, 17h26

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