Langage C probleme avec fonction read
LaZo61
Messages postés
53
Date d'inscription
Statut
Membre
Dernière intervention
-
vico la vico's -
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
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
A voir également:
- Fonction read en c
- Fonction si et - Guide
- Fonction miroir - Guide
- Fonction moyenne excel - Guide
- Fonction remplacer sur word - Guide
- Fonction filtre excel n'existe pas - Forum Excel
6 réponses
Heu readn(), c'est pas une fonction qui existe déjà ? Un truc pour lire plusieurs fois à la suite ?
Sinon essaye comme ça :
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
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
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
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);
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);
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
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
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question