begin process at 2012 02 12 03:19:31
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Réseau / Internet

 > 

fermeture de socket


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

fermeture de socket

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ée 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 [C.] 2 Problèmes sur le serveur [ par Adict ] bonsoir tout le monde. [^^happy13] alors ça va faire vraiment longtemps que je patine sur mon serveur. J'ai cherché et cherché pour le 2ème problème Client / Serveur => Je m'enmèle les pinceaux avec le buffer, les boucles etc. [C] [ par matad0r ] Bonjour, bonjour!J'ai récemment créé une petite application client/serveur de rien du tout (je suis débutant), en m'aidant de ça : http://c.developpez les socket [ par ben83510 ] Bonjour, Je me suis lancer dans le tutoriel sur les socket. J arrive a effectuer la connexion lorsque j execute le serveur et le client sur mon pc.Ma Thread & Socket [ par katerson ] Bonjour tout le monde! Je travaille actuellement sur un projet serveur/client sur UDP. Mon serveur comporte 3 threads qui doivent scruter (indépenda plantage du serveur [ par Adict ] Bonjour [^^happy13] alors voila j'ai fini un projet mais il y a un problème. Il se compose d'une application client et serveur. Il y a quelque temps Problème de Compilation (avec classes) [ par baptchr55 ] Bonjour à tous... Voilà, j'ai un nouveau problème. J'ai une classe (permettant de créer des Sockets TCP) et lorsque j'essaye de créer un objet Socket problème chat [ par Adict ] salut tout le monde [^^happy17] alors j'ai commencé depuis peu à vouloir créer un "chat" simple. j'utilise donc les sockets qui marchent mais j'ai 2 [Socket] SendBuff une BMP [ par afrodje ] Salut. Je voudrais transmettre un fichier image (bmp) avec les composants Tsocketserveur et TSocketclient. Mon problème vient d'une vulgaire fenêtre w optimisation de code, liens entre objets [ par szambaux ] Bonjour, je cherche à optimiser une partie de mon code Je suis en train de développer un serveur SSL avec Qt; j'ai plusieurs classes: -CoreServer -Cl


Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
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

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 3,011 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales