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/Web Python Discussion :

Problème avec les threads


Sujet :

Réseau/Web Python

  1. #1
    Futur Membre du Club
    Homme Profil pro
    laborantin cimenterie
    Inscrit en
    Décembre 2014
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : laborantin cimenterie
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2014
    Messages : 12
    Points : 5
    Points
    5
    Par défaut Problème avec les threads
    Bonsoir,

    J'ai un problème avec l'exécution de deux scripts (pour une communication basique entre client et serveur) faisant intervenir les threads, la référence au client par c>message et au serveur par s>message ne fonctionne pas tout le temps.

    Ci-joint les deux scripts:

    Serveur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
     
    import socket, sys, threading
     
    HOST = ""
    PORT = 50010
    mySocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    try:
        mySocket.bind((HOST, PORT))
    except socket.error:
        print("La liaison du socket à l'adresse choisie a échoué.")
        sys.exit()
    print("Serveur prêt, en attente de requêtes ...")
    mySocket.listen(5)
    connexion, adresse = mySocket.accept()
    print("Client connecté, adresse IP %s, port %s" % (adresse[0], adresse[1]))
     
    class VersClient(threading.Thread):
        def __init__(self,clientsocket):
            threading.Thread.__init__(self)
            self.clientsocket=clientsocket
            self.clientsocket.send(bytes("Vous êtes connecté au serveur Marcel. Envoyez vos messages.", "utf8"))
     
        def run(self):
            while 1:
                msgServeur = input("S> ")
                self.clientsocket.send(msgServeur.encode())
     
    class DepuisClient(threading.Thread):
        def __init__(self,clientsocket):
            threading.Thread.__init__(self)
            self.clientsocket=clientsocket
     
        def run(self):
            while 1:
                msgClient = self.clientsocket.recv(1024)
                msgClient1 = msgClient.decode()
                print("C> "+ msgClient1)
                if msgClient1=="FIN" or msgClient1=="Au revoir !":
                    break
            self.clientsocket.send(bytes("Au revoir !", "utf8"))
            print("Connexion interrompue.")
            self.clientsocket.close()        
     
    versclient=VersClient(connexion)
    depuisclient=DepuisClient(connexion)
    depuisclient.start()
    versclient.start()
    Client :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
     
    import socket, sys, threading
     
    HOST = 'LOCALHOST'
    PORT = 50010
    mySocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    try:
        mySocket.connect((HOST, PORT))
    except socket.error:
        print("La connexion a échoué.")
        sys.exit()
    print("Connexion établie avec le serveur.")
     
    class VersServeur(threading.Thread):
        def __init__(self,clientsocket):
            threading.Thread.__init__(self)
            self.clientsocket=clientsocket
     
        def run(self):
            while 1:
                msgClient = input("C> ")
                self.clientsocket.send(msgClient.encode())
     
    class DepuisServeur(threading.Thread):
        def __init__(self,clientsocket):
            threading.Thread.__init__(self)
            self.clientsocket=clientsocket
     
        def run(self):
            while 1:
                msgServeur = self.clientsocket.recv(1024)
                msgServeur1=msgServeur.decode()
                print("S> "+ msgServeur1)
                if msgServeur1=="FIN" or msgServeur1=="Au revoir !":
                    break
            self.clientsocket.send(bytes("Au revoir !", "utf8"))
            print("Connexion interrompue.")
     
    versserveur=VersServeur(mySocket)
    depuiserveur=DepuisServeur(mySocket)
    depuiserveur.start()
    versserveur.start()
    Merci d'avance pour votre aide.

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Salut,

    Citation Envoyé par Sylvestre13 Voir le message
    J'ai un problème avec l'exécution de deux scripts (pour une communication basique entre client et serveur) faisant intervenir les threads, la référence au client par c>message et au serveur par s>message ne fonctionne pas tout le temps.
    Ca serait bien de mieux décrire ce que vous constatez comme problème (histoire de savoir quoi chercher).

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Futur Membre du Club
    Homme Profil pro
    laborantin cimenterie
    Inscrit en
    Décembre 2014
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : laborantin cimenterie
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2014
    Messages : 12
    Points : 5
    Points
    5
    Par défaut Précision
    Bonjour,

    Merci pour la réponse, ci-joint une photo pour illustrer le problème.
    Bonne journée.

    Nom : pb script.png
Affichages : 267
Taille : 271,1 Ko

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut y
    Citation Envoyé par Sylvestre13 Voir le message
    ci-joint une photo pour illustrer le problème.
    C'est un bon début mais vu le code que vous avez écrit, il n'y a rien d'anormal saif si vous attendiez autre chose (mais vous ne dotes pas quoi).

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Futur Membre du Club
    Homme Profil pro
    laborantin cimenterie
    Inscrit en
    Décembre 2014
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : laborantin cimenterie
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2014
    Messages : 12
    Points : 5
    Points
    5
    Par défaut Précision bis
    Je m'attendais à avoir pour une discussion chaque message précédé par l'initiale de celui qui l'écrivait alors que la ce n'est pas le cas, je me retrouve comme le montre l'image avec quelque chose du style:
    S> C> le message au lieu de S> le message ou d'autre fois le message sans initiale avant.

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Certes mais si pendant qu'input('S>') attends une entrée, arrive un print de C> le message, il va s'afficher et la fin de ligne, fait continuer l'attente de l'entrée au début de la ligne suivante.

    Imaginez que vous soyez en train d'écrire un texte sur une feuille de papier et qu'un collègue blagueur, vous donne une tape sur l'épaule çà fait un gribouiilage ok... mais c'est un mouvement asynchrone tout comme le thread qui fait "print" alors que l'autre est bloqué attendant la fin de "input".

    Si vous ne voulez pas que tout se mélange, le plus simple sera d'utiliser une interface graphique les saisies vont dans une boîte différentes que les messages qui arrivent du serveur. Avec un terminal, c'est plus compliqué car, il faut une saisie caractère par caractère et gérer les affichages pour pouvoir reprendre la saisie en cours plus proprement.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  7. #7
    Futur Membre du Club
    Homme Profil pro
    laborantin cimenterie
    Inscrit en
    Décembre 2014
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : laborantin cimenterie
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2014
    Messages : 12
    Points : 5
    Points
    5
    Par défaut
    Okkay merci pour la réponse, j'ai enfin compris ce qui me chagrinait.
    Bonne journée

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

Discussions similaires

  1. Problème avec les thread
    Par _SamSoft_ dans le forum Réseau
    Réponses: 21
    Dernier message: 28/10/2007, 15h21
  2. problèmes avec les threads
    Par lukbutor dans le forum C
    Réponses: 7
    Dernier message: 03/05/2007, 00h15
  3. Problèmes avec les thread et les pointeurs
    Par raspac dans le forum POSIX
    Réponses: 2
    Dernier message: 22/10/2006, 17h35
  4. [BOOST] Problème avec les threads
    Par SOAD08 dans le forum Dev-C++
    Réponses: 7
    Dernier message: 08/10/2006, 10h23
  5. Réponses: 5
    Dernier message: 10/05/2005, 10h22

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