Probleme fonction

cs_Mini92 Messages postés 45 Date d'inscription samedi 18 novembre 2000 Statut Membre Dernière intervention 10 janvier 2009 - 2 juil. 2006 à 03:00
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 - 2 juil. 2006 à 16:21
Plop all :)
J'ai un petit problème que j'arrive pas à regler, peut être que quelqu'un peut m'éclairer (svp)
En fait, j'ai codé un serveur qui est sensé envoyé le résultat de la commande "ping 127.0.0.1" au client.
Le problème c'est que le client ne reçoit que la dernière ligne du buffer..
ps : la fonction sprintf() ne doit pas être adaptée pour ce code.

Code:

FILE *pp;
char buf[256];
char envoi[256];

if (!(pp = popen("ping 127.0.0.1", "r")))
{
   send(csock, "Erreur popen !", 14, 0);
}
else
{
while (fgets(buf, sizeof buf, pp))
{
   sprintf(envoi, buf);
}
send(csock, envoi, strlen(envoi), 0);
pclose(pp);
}

Merci d'avance ;)

7 réponses

SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
2 juil. 2006 à 04:46
Je ne sais pas si ça arrengera le problème mais essais de remplacer sprintf par strcpy. En effet sprintf n'est pas pour ça et ne fonctionne pas comme ça non plus.

___________________________________________
Les plus grands esprits trouvent toujours une solution
0
cs_neria Messages postés 319 Date d'inscription vendredi 21 février 2003 Statut Membre Dernière intervention 16 février 2009
2 juil. 2006 à 09:04
C'est normal que le serveur n'envoie que la dernière ligne de "envoie", car à chaque sprintf tu écrases la valeur précédente ... Pour faire bien il faudrait deux variables et mettre dans le sprintf "%s%s", avec pour le premier %s la valeur précédente et le second la nouvelle valeur.
0
cs_Mini92 Messages postés 45 Date d'inscription samedi 18 novembre 2000 Statut Membre Dernière intervention 10 janvier 2009
2 juil. 2006 à 09:19
[auteurdetail.aspx?ID= 617077 SAKingdom] > j'ai testé avec sprintf, wsprintf, strncpy, strcpy & lstrcat mais j'ai pas reussi :(
[auteurdetail.aspx?ID =56482 neria] > sa m'a l'air compliqué comme solution, yaurai pas une fonction fait exprés des fois :D
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
2 juil. 2006 à 11:31
Pourquoi ton send n'est-il pas à l'intérieur du while?
Et effectivement, strcpy à la place de sprintf

_____________________________________
Un éditeur de ressources gratuit pour Windows
0

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

Posez votre question
cs_Mini92 Messages postés 45 Date d'inscription samedi 18 novembre 2000 Statut Membre Dernière intervention 10 janvier 2009
2 juil. 2006 à 12:03
[auteurdetail.aspx?ID=19734 vecchio56] > Le send n'est pas dans le while car je prefèrerai envoyer tous le buffer d'1 coup, sinon je serais obligé de faire un while(recv(
...
)) au niveau du client (ce qui m'embete un peu).
Merci pour vos reponses, je vais jeter un oeil (plus attentif) a strcpy :)
J'vous tiens au courant si je trouve.
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
2 juil. 2006 à 12:05
Dans ce cas prévois un envoi plus grand que buff, et utilise strcat

_____________________________________
Un éditeur de ressources gratuit pour Windows
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
2 juil. 2006 à 16:21
Si tu utilise strcat, initialise la première valeur de envoi à 0

envoi[0] = 0;

Ensuite, faire une boucle en récupérent une taille indéterminé de donnée dans un buffer limité, ça sens le débordement tampon non?

___________________________________________
Les plus grands esprits trouvent toujours une solution
0
Rejoignez-nous