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 :

socket thread, une affaire de logique (il parait)


Sujet :

Réseau C

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 18
    Points : 15
    Points
    15
    Par défaut socket thread, une affaire de logique (il parait)
    Bonjour à tous,

    Je suis entrain de créer un mini-serveur pour apprendre à gérer les socket et les thread.

    Pour les tutos que je regarde ce sont ceci :
    http://emmanuel-delahaye.developpez.com/reseaux.htm
    http://bob.developpez.com/tutapiwin/index.php (chapitre 5)

    Voici l'idée de base :
    Les sockets on plusieurs fonctions bloquantes (connexion et lecture), donc l'idée de base c'est d'utiliser des threads pour pouvoir gérer les clients qui se connecte.

    voici le schéma de base du script :
    Une fonction qui attend la connexion de client :
    Elle appelle une fonction (bloquante) qui attend la connexion d'un nouveau client, quand il y en a un, un nouveau thread est lancé avec la fonction de gestion du client puis recommence au début.
    La fonction de gestion de client :
    Elle appelle une fonction (bloquante) qui attend de recevoir une commande du client. Quand elle en reçois une, elle la traite puis recommence au début.

    Maintenant mon problème :
    Quand on ferme l'application, le tuto des thread indique qu'il faut contacter les thread pour qu'il se ferme par eux meme (pour libérer les alloc dynamique). Le problème c'est que je vous rappelle que les threads sont bloqué par des fonctions bloquante donc je sais pas comment faire...

    Est-ce que quelqu'un a une idée???

    Merci d'avance

  2. #2
    Expert éminent
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Points : 8 389
    Points
    8 389
    Par défaut
    Ton principe est donc un thread par socket (ou presque) donc pour terminer un thread, il suffit d'envoyer un message "terminer" au socket correspondant. Il est du devoir du thread de traiter ce message proprement. Sache cependant qu'ils existe également d'autres techniques qu'il faut connaître comme les sokets non bloquants ou la gestion des événements (celle que je préfère) par exemple. Pour rendre un socket non bloquant il suffit d'appeler la fonction ioctlsocket (ioctl sous UNIX). Sous Windows tu peux utiliser WSAAsyncSelect pour associer un message en réponse à certains événements se produisant sur un socket (arrivée d'un nouveau message par exemple, etc.).

  3. #3
    Provisoirement toléré
    Profil pro
    Inscrit en
    Février 2008
    Messages
    439
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 439
    Points : 495
    Points
    495
    Par défaut
    Citation Envoyé par Melem Voir le message
    Ton principe est donc un thread par socket (ou presque) donc pour terminer un thread, il suffit d'envoyer un message "terminer" au socket correspondant.
    une socket = une connexion avec le client

    Donc quand le serveur doit s'arrêter, tu suggères qu'il envoie sur les sockets des clients des messages de fermeture aux différents threads?

    Ce serait un joli mélange des protocoles de communication.

Discussions similaires

  1. Réponses: 2
    Dernier message: 26/09/2007, 16h45
  2. [Socket] Détecter une déconnexion
    Par leyee dans le forum Développement
    Réponses: 2
    Dernier message: 05/12/2005, 12h27
  3. [socket] lire une page web
    Par goonies dans le forum Windows
    Réponses: 1
    Dernier message: 19/11/2005, 16h55
  4. [HTTP][Socket] avec une url c'est possible ?
    Par tck-lt dans le forum Entrée/Sortie
    Réponses: 13
    Dernier message: 19/08/2005, 09h39
  5. Chat (sockets + thread)
    Par raf_gug dans le forum MFC
    Réponses: 4
    Dernier message: 14/01/2004, 17h00

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