IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Réseau C Discussion :

Gérer la deconnection d'un client


Sujet :

Réseau C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 53
    Par défaut Gérer la deconnection d'un client
    Bonjour à tous !

    Je dois créer un petit jeu multi-joueurs en temps réel (max 10 connections). Pour ce faire j'ai créé un serveur multi-thread.

    J'ai un problème lors de la déconnection d'un client. Le serveur boucle sans fin pour afficher le dernier message reçu.

    Voila le thread pour chaque client
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    void* reception(void* arg) {
     
        char buffer[4096];
        while(recevoir((int)arg, buffer)) {
            cout << buffer << endl;
     
        }
    	close((int)arg);
        return (void*)1;
    }
    Le client :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        char buf[4096]= "hello";
        envoyer (socket, buf);
        sleep(2);
        envoyer (socket, buf);
    Lorsqu'on quitte le client, que ce soit proprement ou par ctrl-c. Le serveur n'arrête pas d'afficher "hello". Je pense que ça doit être un problème de socket non fermé mais je n'en suis pas sûr !

    EDIT: Comment arrêter le thread lorsqu'un client se déconnecte ?

  2. #2
    Invité(e)
    Invité(e)
    Par défaut
    Bonjour,

    Peux tu poster le code de la fonction recevoir ?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 53
    Par défaut
    Voila

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    int recevoir(int socket, char buffer[4096]) {
        if (recv(socket, buffer, 4096, 0) == -1) {
            perror("Server: recv");
            return EXIT_FAILURE;
        }
        else return 4096;
    }
    En la modifiant comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    int recevoir(int socket, char buffer[4096]) {
        if (recv(socket, buffer, 4096, 0) == -1) {
            perror("Server: recv");
            return -1;
        }
        else return 1;
    }
    J'ai toujours le même problème

  4. #4
    Invité(e)
    Invité(e)
    Par défaut
    Citation Envoyé par pazze Voir le message
    En la modifiant comme ceci :[...]
    J'ai toujours le même problème
    Normal, tu ne sortira de ta boucle while que si recevoir renvoie 0.

    Or EXIT_FAILURE est souvent différent de 0.

    Dans ta fonction recevoir, garde le 'return -1' en, cas d'erreur, mais change la boucle while par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while(recevoir(...) != -1) {...}

  5. #5
    Membre Expert
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 104
    Par défaut
    Mélanger du C et du C++, c'est pas propre, et en plus ça oblige à compiler en C++. Ceux sont deux langages à part entière. Et d'ailleurs il y a des choses écrites en C qui ne compilent pas en C++ (je parle pas de ton code mais en général).

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 53
    Par défaut
    Même en changeant ma boucle while( ..!= -1), j'ai encore le même problème...

    Je suis d'accord pour le mélange C et C++ mais comment bien différencier les deux lors d'un programme réseau (écrit en c++ lui) ?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [sql2005] Deconnection Client
    Par BOUBOU81 dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 03/04/2007, 14h09
  2. [c#]Client - Server : Deconnection
    Par Jabbal'H dans le forum Windows Forms
    Réponses: 2
    Dernier message: 15/03/2007, 21h01
  3. Réponses: 4
    Dernier message: 03/01/2007, 13h32
  4. Réponses: 0
    Dernier message: 15/06/2006, 07h41
  5. [] [Winsock] Pb si je me déconnecte en tant que client
    Par vbcasimir dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 29/04/2003, 18h42

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo