Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : fermeture de socket [ Archives / Réseau / Internet ] (darkkinj)

vendredi 25 février 2005 à 21:24:33 | fermeture de socket

darkkinj

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


samedi 26 février 2005 à 08:52:42 | Re : fermeture de socket

yoyo269

Membre Club
Réponse acceptée !
Salut darkkinj,

pour moi t'as solution me semble plutôt bonne, mais vaut mieux demander à qq'un qui s'y connait pas mal dans le réseau et internet, comme par exemple Aardman.
T'as qu'à lui envoyer un mail pour qu'il regarde sur le forum.
Il saura sûrement te répondre ou au moins son avis qui ne pourra être que pertinant.

YOYO, @+.
YOYO

samedi 26 février 2005 à 17:55:52 | Re : fermeture de socket

aardman

Membre Club
Salut,
Perso j'ai pas bien compris..
Tu déconnectes un client si il n'envoies rien pendant 3 fois ? mais comment tu sais qu'il n'a rien envoyé, puisque tu n'a rien recu ?
Je pense qu'il vaudrait mieux faire un systeme de timeout non ? (si le client ne fait rien pendant 1 minute => déco).

samedi 26 février 2005 à 18:46:21 | Re : fermeture de socket

darkkinj

ben le truc c'est que si je tur le processus client ( via ctrl+alt+suppr), le serveur reçoit lui plein de message vides en fait, la socket n'est pas fermée mais il n'y a plus personne de l'autre côté. J'aurai voulu essayer de tester si un client était toujours présent mais vu ke le serveur reçoit tant de message vide ce n'est pas faisable. Vu que apparemment il  n'y a pas d'autres solutions je vais accepter la première réponse.

darkkinj
http://www.kinj.fr.st

samedi 26 février 2005 à 18:53:43 | Re : fermeture de socket

aardman

Membre Club
Salut,
Je comprend pas l'expression: "recevoir un message vide".
Un moyen de savoir quand un client se déco c'est de regarder la valeur de retour du recv():
Si c'est SOCKET_ERROR ou 0, tu peux considerer que la connexion est perdue.

dimanche 27 février 2005 à 01:36:16 | Re : fermeture de socket

Stormy

Pour tu n'essaie pas avec cette fonction:

WaitForSingleObject( pi.hProcess, INFINITE );

Si ton client 'meurt' (selon ton expression), tu engage un processus adéquat.




Cette discussion est classé dans : buffer, commande, client, socket, cout


Répondre à ce message

Sujets en rapport avec ce message

chat client server [ par electroonn ] Bonjour, j'essaye de developper avec c++ une application de chat (client-server) sous windows, en voici le code:Server server; Client client; void m Requetes serveur cs 1.6 [ par Mini92 ] En fait, j'essaye d'envoyer des requêtes sur mon serveur cs mais je n'obtiens aucun retour.Voilà le code si quelqu'un peu m'aider svp#include #include Message Asynchrone Socket [ par touys ] Bonjour , je réalise un programme en C++ d'un Client, mon Client doit traiter des messages asynchrones qu'il peut reçevoir, cependant je n'arrive pas Caractère bizzare [ par bizzard4 ] Bonjour!J'essaye d'envoyer une chaîne de caractère en réseau mais cela ne marche pas :(Par exemple :j'envoye ceci =>send(csock, "Bonjour Client", 14, [C] SOCKET [ par sda2 ] bonjour,en fait j'ai un petit problème avec les sockets en mode TCP...je programme un serveur multiclient, dans lequel, chaque client aura un traiteme Problème d'IP Client avec les winsock [ par Cphil51 ] Boujour a tous.Je m'interesse en ce moment aux socket sous windows et j'ai un petit probleme actuellement. J'aimerais savoir comment récupérer l'IP d' WSAEventSelect, deux appels [ par NaeiKinDus ] Bonjour tout le monde :)Je planche actuellement sur la creation d'un serveur web en c++ mais je rencontre un soucis.J'ai un WSASelectEvent (situe au n Envois et reception de commande [ par t0Xic_h ] SalutVoici mon code source .La connection entre le client et le serveur se passe bien, mais je n'ai pas su ecrirele code qui me permettera d'envoyer l Fin de recv [ par Ziman ] Bonjour,je fais actuellement une chtite application. J'aimerai juste qu'un client se connecte sur un serveur et qu'il puisse lui envoyer des messages. Probléme pour lire le buffer au lancement de la connexion [ par logant83 ] Bonsoir, voila enfaite j'ai établi une connexion sur un server irc grace au socket mais quand je recois sur le buffer les différente informations (Ell


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 2,262 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.