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 :

recv + buffer


Sujet :

C++

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Avril 2006
    Messages
    33
    D�tails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 33
    Par d�faut recv + buffer
    Bonjour,

    J'ai un petit probl�me avec un client et serveur en c++ voici les partit du code

    Client receive :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
             char * bufferR = (char*)calloc(_BUFFERLEN_,sizeof(char));
              nbByteRecv=SOCKET_ERROR;
        do
        {
            strcpy(bufferR,"");
            nbByteRecv= recv(socketClient,bufferR,_BUFFERLEN_,0);  
            cout<<">"<<bufferR<<"--"<<nbByteRecv<<endl;  
     
        }while (nbByteRecv != SOCKET_ERROR); 
        cout <<"fin receive !!!!!!"<<WSAGetLastError()<<endl;
    Serveur qui recoi et renvoi
    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
     
    do 
    {
         strcpy(buffer1,"");
        nbByteRecvSend = recv(param->sock,buffer1,_BUFFERLEN_,0);  
        cout<<buffer1<<" - "<<nbByteRecvSend<<endl;
     
        if (nbByteRecvSend != SOCKET_ERROR)
        {
          for (int i = 0 ; i < 3 ; i++)
          {           
    nbByteRecvSend =send(listeClient[i].socketClient,buffer1,nbByteRecvSend,0); 
                 cout<<"nbbyte --------"<<nbByteRecvSend<<endl;
          }//fin for
        }//fin if nbbyterecv
     
      }while (nbByteRecvSend != SOCKET_ERROR);
    Le probl�me est :
    client envoi : AAAAA
    Serveur recoi et renvoi : AAAAA
    Client envoi : BB
    Serveur recoi : BB mais affiche BBAAA et indique qui a recu que 2 octets
    Serveur renvoi : AABB

    Donc je n'arrive pas a trouver ou est ce que le data superflu est gard�. Je crois que ce qui est envoy� est correct, c'est plut�t � la r�ception que ca se passe.
    Si quelqu'un a une id�e , et si ce n'est pas suffisament claire, juste a le dire.
    Merci

  2. #2
    Expert confirm�

    Inscrit en
    Novembre 2005
    Messages
    5 145
    D�tails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par d�faut
    recv n'ajoute pas de \0 � la fin de ce qui est re�u.

  3. #3
    Alp
    Alp est d�connect�
    Expert confirm�

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 36
    Localisation : France, Bouches du Rh�ne (Provence Alpes C�te d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Par d�faut
    Car � chaque boucle tu dois vider le buffer avant de le re remplir, sinon tu remplaces les anciennes lettres par les nouvelles. Seulement si ta nouvelle chaine est plus courte, les anciennes au del� de la nouvelle resteront.

    Edit : En effet Jean-Marc, c'est une autre fa�on de faire que de rajouter le \0 .

  4. #4
    Membre averti
    Inscrit en
    Avril 2006
    Messages
    33
    D�tails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 33
    Par d�faut Vider le buffer
    Citation Envoy� par Alp
    Car � chaque boucle tu dois vider le buffer avant de le re remplir, sinon tu remplaces les anciennes lettres par les nouvelles. Seulement si ta nouvelle chaine est plus courte, les anciennes au del� de la nouvelle resteront.

    Edit : En effet Jean-Marc, c'est une autre fa�on de faire que de rajouter le \0 .

    Je suis bien d'accord pour vider le buffer , mais comment , strcpy(buffer,"") marche pas, mais je crois que je vais essayer le caractere de fin .

  5. #5
    Membre Expert
    Avatar de Ti-R
    Homme Profil pro
    Ing�nieur R&D
    Inscrit en
    Avril 2003
    Messages
    1 683
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 46
    Localisation : France, Hauts de Seine (�le de France)

    Informations professionnelles :
    Activit� : Ing�nieur R&D
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 683
    Par d�faut
    Citation Envoy� par sawbo1
    Je suis bien d'accord pour vider le buffer , mais comment , strcpy(buffer,"") marche pas, mais je crois que je vais essayer le caractere de fin .
    On a rien vu..

    il y a memset(...) mais bon c'est inutile ici.

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    nbByteRecv= recv(socketClient,bufferR,_BUFFERLEN_,0);
    nbByteRecv // taille re�u

    Attention � recv

    Il faut tester sa valeur de retour.
    Donc

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
     
    // _BUFFERLEN_-1 car on ajoute '\0'
    nbByteRecv= recv(socketClient,bufferR,_BUFFERLEN_-1,0);  
    if(nbByteRecv> 0) // si tu as reçu quelque chose
    {
       bufferR[nbByteRecv]='\0';
       cout<<">"<<bufferR<<"--"<<nbByteRecv<<endl;  
    }

Discussions similaires

  1. Ajuster la taille du buffer pour recv
    Par figarojuju dans le forum R�seau
    R�ponses: 11
    Dernier message: 04/09/2010, 12h55
  2. Lecture de buffer important sur la fonction Recv
    Par Fooshi dans le forum R�seau
    R�ponses: 1
    Dernier message: 31/07/2010, 22h20
  3. recv() et taille buffer.
    Par superpok dans le forum D�veloppement
    R�ponses: 12
    Dernier message: 09/06/2007, 17h19
  4. [SOCKET] - Buffer & Read() ou Recv()
    Par jacquesh dans le forum C++
    R�ponses: 14
    Dernier message: 27/04/2006, 10h42
  5. Alpha blending et Z-buffer directx 8
    Par Cesar4 dans le forum DirectX
    R�ponses: 1
    Dernier message: 23/05/2002, 12h58

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