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

C Discussion :

Serveur multi thread - Question pratique


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4
    Par défaut Serveur multi thread - Question pratique
    Bonsoir,

    Je suis en deuxième année d'école d'ingénieur en informatique et télécommunications et doit, dans le cadre de mes études, réaliser un serveur multi thread.

    Pour le moment, j'utilise deux fichiers .c , l'un pour le serveur et le second pour le client.

    Le serveur utilise un thread 'traiter_nouvelle_connexion' qui permet de gérer les nouveaux clients qui veulent se connecter et qui lance un second thread permettant la gestion des envois/réceptions de données des clients sur le serveur.

    Le client, lui, se connecte au serveur et va envoyer/recevoir des données au serveur/du serveur et gère l'affichage des messages dans le terminal.

    Mon problème est le suivant :

    Avant que le client n'écrive, j'affiche son nom sur son terminal, puis le client écrit sur la ligne.
    Si le client reçoit des messages, le nom de l'envoyeur s'affiche ainsi que son message sur le terminal du client.
    J'aimerais alros que le client qui était en train d'écrire puisse revoir son nom et ce qu'il avait déja ecrit pour continuer son petit message.

    Est ce que c'est possible ? en sachant que tous les affichages d'un client se font sur un seul terminal.

    Est ce que vous auriez une idée pour palier mon problème ? Je bloque depuis beaucoup de temps sur ce problème sans trouver de solution...

    Merci d'avance, et bonne soirée !

  2. #2
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 026
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 026
    Par défaut
    Si j'ai bien compris, tu est en train d'écrire quand tu affiches un texte et ceci te pose problème.

    La solution la plus simple serait d'utiliser une bibliothèque graphique ayant des widget.
    Pour moi la solution la plus simple tout en restant en C serait de créer une application Qt pour la vue, puis de :
    - lancer ton client ;
    - ouvrir deux tubes ;
    - faire un fork ;
    - recouvrir le fils par ton application Qt ;
    - dialoguer via les tubes

    Sinon il faut s'amuser avec curse.h (ncurse) et/ou conio.h pour placer les textes exactement là où on veut pour ne pas écrire par dessus l'affichage de l'entrée standard.

    Sinon, je connais des personnes qui avaient fait quelque chose de similaire, dès que je la voie je lui pose la question.

  3. #3
    Membre très actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2010
    Messages
    434
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2010
    Messages : 434
    Par défaut
    Si c'est dans un shell ou terminal que ton client tourne va voir du coté des termcap sinon si c'est une appli graphique va voir du coté de Qt

  4. #4
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    Ton problème, c'est que ton client est exécuté sur un shell qui reproduit sur son flux de sortie apparent son flux d'entrée.

    voici un micro contournement
    crée une fifo nommée (mkfifo /tmp/my_test_fifo)
    lance ton client en redirigeant ses sortie vers la fifo (./client &>/tmp/my_test_fifo)
    ouvre un autre terminal et affiches-y en continu la fifo (tail -f /tmp/my_test_fifo)

    Le terminal du client n'affichera plus que les entrées claviers, puisque tout affichage venant du programme client sera redirigé ailleurs.
    Le terminal de la fifo n'affichera que les affichages du programme client

    Si tu es sous windows, tu dois pouvoir faire la même chose, mais je ne connait pas l'interface console de windows.

  5. #5
    Membre très actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2010
    Messages
    434
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2010
    Messages : 434
    Par défaut
    Le mieux c'est les TermCap, ça te permet de te mettre en mode canonique avec echo off comme ça tu n'affiche plus l'entrée standard.

    A partir de la toujours avec les termcaps tu peux bouger le curseur comme tu veux pour écrire ce que tu désire ou tu veux et tu continu à écouter l'entrée standard pour que ton client récupère les informations envoyé par ton clavier.

    Par contre comme l'entrée ne s'affiche plus automatiquement tu dois gérer tout l'affichage de ton client.

  6. #6
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 026
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 026
    Par défaut
    Citation Envoyé par Neckara
    Sinon, je connais des personnes qui avaient fait quelque chose de similaire
    Pour un client IRC sur console ils avaient utilisé ncurses (curse.h), donc je pense qu'il y a ce que tu recherches dedans.

Discussions similaires

  1. question article "Création d'un serveur multi-threads en C++"
    Par contremaitre dans le forum Threads & Processus
    Réponses: 2
    Dernier message: 20/06/2008, 12h01
  2. [C++][serveur multi-threads] prob de connection
    Par Just_the_boss dans le forum C++
    Réponses: 4
    Dernier message: 23/02/2006, 19h09
  3. [Socket] un serveur multi thread
    Par mzt.insat dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 12/11/2005, 13h25
  4. Réponses: 7
    Dernier message: 19/10/2004, 19h09
  5. Réponses: 16
    Dernier message: 30/01/2004, 11h05

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