Je me trouve face à un problème de protection pour mon application serveur. Le serveur est sur un thread correspondant à un client en boucle (quasi)infinie qui gère la sortie normale pour la fermeture de socket.
J'ai trouver comme solution que si le client n'envoie rien 3 fois il est déconnecté. Dans ce cas si le client est tué, le serveur lit sur une socket où il n'y a rien et au bout de trois fois déconnecte.
J'aurais voulu savoir si c'est une bonne méthode ou si je me trompe totalement et que normalement je devrai faire autre chose. voici le code de traitement client:
DWORD WINAPI TraitementClient(LPVOID lpParam){
cout << "dans le thread" << endl;
char buffer[1024];
char commande[8];
char arg[1024];
int essai=0;
strcpy(buffer,"");
Client* client=(Client*)(lpParam);
SOCKET socket=client->GetSocket();
cout << "socket : " << socket << endl;
while (strcmp(buffer,"#!exit")!=0 && essai!=3){
strcpy(buffer,"\0");
strcpy(commande,"\0");
recv(socket,buffer,sizeof(buffer),0);
sscanf(buffer,"%s",commande);
cout << "dans le buffer" << buffer << endl;
if (strcmp(commande,"#!say")==0){
strcpy(arg,&buffer[strlen(commande)+1]);
cout << arg << endl;
essai=0;
strcpy(buffer,"");
strcat(buffer,&(client->Getname())[0]);
strcat(buffer," a dit: ");
strcat(buffer,arg);
cat.Diffuser(buffer);
}
if (strcmp(buffer,"\0")==0){
cout << "rien dans le buffer";
essai++;
}
}
return 0;
}
merci d'avance...
darkkinj
http://www.kinj.fr.st