Langage C probleme avec fonction read

Fermé
LaZo61 Messages postés 53 Date d'inscription jeudi 1 février 2007 Statut Membre Dernière intervention 24 mai 2007 - 24 mai 2007 à 11:37
 vico la vico's - 8 déc. 2010 à 18:26
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

6 réponses

Stupeflip Messages postés 391 Date d'inscription jeudi 8 février 2007 Statut Membre Dernière intervention 4 décembre 2007 94
24 mai 2007 à 12:15
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
LaZo61 Messages postés 53 Date d'inscription jeudi 1 février 2007 Statut Membre Dernière intervention 24 mai 2007 5
24 mai 2007 à 12:05
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
LaZo61 Messages postés 53 Date d'inscription jeudi 1 février 2007 Statut Membre Dernière intervention 24 mai 2007 5
24 mai 2007 à 12:09
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
Stupeflip Messages postés 391 Date d'inscription jeudi 8 février 2007 Statut Membre Dernière intervention 4 décembre 2007 94
24 mai 2007 à 12:00
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

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

Posez votre question
Stupeflip Messages postés 391 Date d'inscription jeudi 8 février 2007 Statut Membre Dernière intervention 4 décembre 2007 94
24 mai 2007 à 12:06
Ta déclaration vaut
char buffer [10000];
c'est ça ?
0
vico la vico's
8 déc. 2010 à 18:26
blablabla
0