Alors oublie mon programme en liens

Ta fonction strstr() servira simplement à trouver des retours à la ligne au lieux des commandes comme ping. Tu n'as qu'a mettre dans un buffer ce qui arrive en accumulant, ensuite une deuxième fonction s'occupera du traitement ligne par ligne, une fois qu'une ligne est faite il suffit de la retirer du buffer et recommencer le processus jusqu'a ne plus trouver de retour de chariot, ça peut signifier soit qu'il n'y a plus rien à traiter, soit il reste quelque chose d'incomplet mais de toute façon on sort de la fonction de traitement. Une fois un nouveau packet arrivé il va s'additionner à ce qui restait dans le buffer non traité (s'il y a des octets non traités) et ainsi de suite.
Un petit exemple au niveau prog (je suis un débutant et un expert serait sûrement faire beaucoup mieux, mais je connais ces concepts car j'ai codé des applications rézo pendant longtemps en VB (et oui ex VBiste))
char Buffer[4096]; //Tu le met de la grosseur que tu veux, mais assure toi que si il en arrive plus il n'y aura pas d'explosion
//C'est un copier-coller un peu modifier d'un de met programme, ne pas se fier au contenu à 100%
//Dans ce cas c'était une thread car c'est le code d'un serveur que j'ai pris, mais tu peux utiliser les sockets asynchromesvoid FonctionQuiRecois(ClientArbre *Client)
{
char tmpData[1024+1];
//Mettre un packet à la fois Buffer[0] = 0;
//Mettre le buffer à 0 while(1) {
Fin = recv(Client->Socket, tmpData, 1024, 0);
if (Fin > 0)
{
tmpData[Fin] = 0;
//Ajouter le caractère de fin de chaine if (Fin + strlen(Buffer) < 4096)
//Anti Overflow strcat(Buffer, tmpData);
TraitementDonnee(Client);
}
else break;
}
}
//Traitement des donnéesvoid TraitementDonnee(ClientArbre *Client)
{
int Pos = strstr(Buffer, Retour) - Buffer;
char Ligne[1024]; if (Pos < 0)
//Si non trouvé on quitte la fonction return; if (Pos > 1024)
//J'ai limité chaque ligne à 1024 caractères seulement !! Sinon on efface le buffer {
ZeroMemory(Buffer, 4096);
//Tout détruires return;
}
do {
CopyMemory(Ligne,Buffer, Pos); /
/On veut une ligne à la fois Ligne[Pos] = 0;
//CopyMemory ne met pas le caractère 0 //C'EST ICI QUE TU TRAITE CHAQUE COMMANDE !! strcpy(Buffer, Buffer + Pos + 2); /
/Éliminer la ligne Pos = strstr(Buffer, Retour) - Buffer;
}
while (Pos >= 0 && Pos <= 1024);
//Si strstr retourne une valeur négative alors on quitte la fonction c'est que c'est imcomplet ou terminé}
J'espère que ça t'aidera plus, si un expert passe dans le coin qu'il n'hésite pas à commenter surtout :D (Qui a parlé de BN ? hum j'ai rien fait

)
Hésite pas a en demander d'avantage (mais je vais être plus lent à répondre étant donné que j'aurai internet seulement 1h ou 2 certain jour)
A+
[ Lien ]
MSN : x_men_40(