Langage C probleme avec fonction read

LaZo61 Messages postés 53 Statut Membre -  
 vico la vico's -
Bonjour,
j'ai creer un client serveur.
Mon client envoyer des donnes du type :
"V 0000000000000000000" a la socket serveur et si je sniff je peu voir que la socket serveur la bien recu,
cependant dans mon code
si je fait un
read(fd,buffer,buffersize);
il lie que la premiere caractere en locurence le "V"
mai si sur le socket serveur il est envoyer des donnes sans espace il lie tou.
Comment remedie a ce probleme
merci davance

--
C* -----> Either exist as you are or be as you look <---- C*
Configuration: Linux
Firefox 1.0.7

6 réponses

  1. Stupeflip Messages postés 391 Date d'inscription   Statut Membre Dernière intervention   94
     
    Heu readn(), c'est pas une fonction qui existe déjà ? Un truc pour lire plusieurs fois à la suite ?

    Sinon essaye comme ça :
    int read_sock (int sockhandle, unsigned char *buf, int taille)
    {
      	int byte_lu = -1;
      	unsigned char *ptbuf =buf;
      	int length = taille;
      	int i = 0;
      	
    	do {
      		byte_lu = read (sockhandle, ptbuf,length);
      		if (byte_lu > 0)
    		{
      			ptbuf = ptbuf+byte_lu;
      			length = length-byte_lu;
      		}
    		i++;
    		if(i > 10000) 
    			return -1;
      	} while (length > 0);
      	return (length);
    }
    Ca devrait marcher comme ça
    6
  2. LaZo61 Messages postés 53 Statut Membre 5
     
    no la taille du buffer elle vaut 1000
    en faite j'envoie 3 paquets
    |00001|222| ----> 1 er paquet
    W skjdfsdjfsdfjdfk ----> 2 eme paquet
    Z fdfdsfdf --->3eme paquet

    pour le 1 ere paquet elle lie tou
    le 2nd elle lie que le w
    et le 3eme elle li que le Z
    je ne comprend vraiment pas pourquoi
    elle ne lie pqs tout le paquet
    1
  3. LaZo61 Messages postés 53 Statut Membre 5
     
    en faite voila mon code :
    char buffer[PACKET_SIZE +1];
    readn(fin, buffer, PACKET_SIZE);

    int readn(int fd, char *ptr, int n){
    int nl, nr;
    nl = n;
    while ( nl > 0 ) {
    printf("buffer size : %d\n",nl);
    nr = read(fd,ptr,nl);
    printf("point 1 : %s\n",ptr);
    if (nr < 0 ) {
    if ( nr == -1 ) {
    *ptr = 0x00;
    return (n-nl);
    }
    return nr; /*error*/
    } else {
    if ( nr == 0 )
    break;
    }
    nl -= nr;
    ptr += nr;
    }
    /*pointing ptr to the adress 0x00*/
    *ptr = 0x00;
    return (n-nl);

    1
  4. Stupeflip Messages postés 391 Date d'inscription   Statut Membre Dernière intervention   94
     
    Salut,

    Comment est déclaré buffer ? Taille fixe ou dynamique ? Si dynamique, as-tu fait un malloc/new ? Ton buffersize vaut-il sizeof(buffer) ?

    Bon courage
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Stupeflip Messages postés 391 Date d'inscription   Statut Membre Dernière intervention   94
     
    Ta déclaration vaut
    char buffer [10000];
    c'est ça ?
    0