Rechercher : dans
Par :

Langage C probleme avec fonction read

Dernière réponse le 24 mai 2007 à 12:15:06 LaZo61, le 24 mai 2007 à 11:37:53 
 Signaler ce message aux modérateurs

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

Meilleures réponses pour « langage C probleme avec fonction read » dans :
Les classes en langage C++ Voir La notion d'objet Le langage C est un langage procédural, c'est-à-dire que c'est un langage permettant de définir des données grâce à des variables, et des traitements grâce aux fonctions. L'apport principal du langage C++ par rapport au...
Les files en langage C VoirLes files - Premier Entré Premier Sorti Requis I. INTRODUCTION II. Définition III. La construction du prototype d'un élément de la file IV. Opérations sur les files A. Initialisation B. Insertion d'un élément dans la file C. Oter un...
Langage C - Les chaînes de caractères VoirQu'est-ce qu'une chaîne de caractères ? Une chaîne de caractères (appelée string en anglais) est une suite de caractères, c'est-à-dire un ensemble de symboles faisant partie du jeu de caractères, défini par le code ASCII. En langage C, une chaîne...
Langage C - Les fonctions VoirLa notion de fonction On appelle fonction un sous-programme qui permet d'effectuer un ensemble d'instructions par simple appel de la fonction dans le corps du programme principal. Les fonctions permettent d'exécuter dans plusieurs parties du...

1

Stupeflip, le 24 mai 2007 à 12:00:12

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
Qui n'a rien n'a rien (Proverbe Norvillois)

Répondre à Stupeflip

2

LaZo61, le 24 mai 2007 à 12:05:10

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
C* -----> Either exist as you are or be as you look <---- C*

Répondre à LaZo61

3

Stupeflip, le 24 mai 2007 à 12:06:25

Ta déclaration vaut
char buffer [10000];
c'est ça ?
Qui n'a rien n'a rien (Proverbe Norvillois)

Répondre à Stupeflip

4

LaZo61, le 24 mai 2007 à 12:09:06

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);

avec packetsize aui est defini a 1000


C* -----> Either exist as you are or be as you look <---- C*

Répondre à LaZo61

5

 Stupeflip, le 24 mai 2007 à 12:15:06
  • +2

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
Qui n'a rien n'a rien (Proverbe Norvillois)

Répondre à Stupeflip
Collection CommentÇaMarche.net