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

Développement Discussion :

socket


Sujet :

Développement

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 2
    Points : 2
    Points
    2
    Par défaut socket
    Communication entre un client et un serveur en mode TCP:
    - Le client et le serveur sont connectés => pas de pb
    - Le client se déconnecte
    Si le serveur faisait un write(socket...) sur la socket, il reçoit le signal SIGPIPE
    Si le serveur faisait un read(socket...) sur la socket, aucun signal SIGPIPE n'est élis alors je ne sais pas comment je peux procéder pour mettre avertir le serveur que le client s'est déconnecté

  2. #2
    zul
    zul est déconnecté
    Membre éclairé Avatar de zul
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    498
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 498
    Points : 699
    Points
    699
    Par défaut
    il fo etudier dans tous les packets ke tu recois les flags tcp. si tu recois un FIN ou un RST, c ke la connection a été interrompu (premier cas, deconnection normal, deuxieme cas deconnection suite une desynchro, mauvaise chaine numerik ... ).

    Pour faire ca, je pense k'il fo utiliser des raw sockets, ce ki risk de compliquer kelkes peu ton appli.

    Enfin, si c juste pour envisager un cas de deconnection voulu du client, il te suffit de lui faire envoyer un message predefini. si le serveur recoit ca, il saura alors ke la connection est terminé.

    La premiere methode est plus generale, plus dans l'esprit du protocole mais a mon avis qd meme assez cho : les raw sock c qd meme pas super simple.

    ZUL

  3. #3
    vic
    vic est déconnecté
    Membre confirmé

    Profil pro
    Inscrit en
    Août 2002
    Messages
    431
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 431
    Points : 498
    Points
    498
    Par défaut
    Oulà je pense que ce n'est pas la peine de chercher si compliqué :o)

    La solution est dans le read : si le client est connecté read renvoie normalement le nombre d'octets lus, mais si celui-ci vaut 0 cela signifie que la connexion est rompue. (si le client est connecté mais n'envoie rien l'appel de read est bloquant donc pas de confusion possible).

    vic

  4. #4
    zul
    zul est déconnecté
    Membre éclairé Avatar de zul
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    498
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 498
    Points : 699
    Points
    699
    Par défaut
    je suis pas convaincu. si pendant une certaine durée le client n'envoye rien, le read va etre a 0 et va donc considere le client comme deconnceté. or rien n'empeche le client de ne rien faire pendant 10 ou 15 min ( exemple afk). dans ce cas la, le client sera tjs connecté mais n'enverra aucune request vers le serveur donc read devrait etre a 0. enfin je crois et je peux me tromper .

    ZUL

  5. #5
    vic
    vic est déconnecté
    Membre confirmé

    Profil pro
    Inscrit en
    Août 2002
    Messages
    431
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 431
    Points : 498
    Points
    498
    Par défaut
    En effet tu te trompes :o)

    read() est un appel bloquant et donc il ne retourne pas tant qu'il n'a pas recu de données. (ce comportement peut être changé grâce à la fonction fcntl())

    extrait de la page man de read :
    RETURN VALUE
    On success, the number of bytes read is returned (zero indicates end of file)
    Si tu cherches à écouter sur la socket jusqu'à recevoir des données ou bien qu'un certain temps se soit écoulé tu peux utiliser la fonction select().

    vic

  6. #6
    zul
    zul est déconnecté
    Membre éclairé Avatar de zul
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    498
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 498
    Points : 699
    Points
    699
    Par défaut
    En effet ca m'apprendra a lire le fonctionnement des fonctions =)

    ZUL

Discussions similaires

  1. [FLASH][SOCKET] XMLsocket sous Flash
    Par Muetdhiver dans le forum Dynamique
    Réponses: 3
    Dernier message: 29/10/2009, 11h38
  2. executer une application a distance : Sockets ? RPC ? CORBA?
    Par a_hic dans le forum Développement
    Réponses: 5
    Dernier message: 30/05/2006, 13h02
  3. raw socket et langage c
    Par SlayDave dans le forum Développement
    Réponses: 2
    Dernier message: 29/08/2002, 19h09
  4. Socket:Envoyer du texte d'un serveur vers tout les clients
    Par cedm78 dans le forum Web & réseau
    Réponses: 7
    Dernier message: 01/08/2002, 16h40
  5. transfert d'un fichier bitmap en socket tcp
    Par localhost dans le forum C++Builder
    Réponses: 5
    Dernier message: 29/07/2002, 00h40

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