Partage
  • Partager sur Facebook
  • Partager sur Twitter

Probleme de threads.

    12 août 2019 à 23:14:04

    Bonjour,

    Débutant en python, je suis le cours proposé par OC. Pour la dernière activité, je dois, notamment, écrire un client qui doit envoyer des infos au server ET en recevoir.

    J'ai choisi d'utiliser les threads pour y parvenir mais cela ne fonctionne pas : j'arrive à envoyer les infos mais mon thread sensé recevoir les informations du server ne fonctionne pas. (J'ai vérifié et le serveur envois bien les informations)

    Le programme me propose en boucle de lancer des commandes mais ne m'affiche jamais les informations qui reviennent du serveur.

    Voici mon code client :

    # -*- coding:utf8 -*-
    from thread_client import *
    from threading import Thread
    
    thread_reception = MainThread('reception')
    thread_emission = MainThread('emission')
    
    thread_reception.start()
    thread_emission.start()
    
    thread_reception.join()
    thread_emission.join()

    Et ma class Thread :

    from threading import Thread, RLock
    from mods.class_command import *
    import socket
    import select
    import pickle
    
    
    class MainThread(Thread):
    
        def __init__(self, mode):
            Thread.__init__(self)
            self.mode = mode
    
        def run(self):
            host = 'localhost'
            port = 12800
            main_connexion = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
            main_connexion.connect((host, port))
    
            if self.mode == 'reception':
                connexion = True
                while connexion:
                    print('test')
                    received_msg = main_connexion.recv(1024)
                    received_msg = pickle.loads(received_msg)
                    received_msg.display_grid()
    
            else:
                command = PlayerCommand()
                command.display_list_commands()
    
                msg_to_send = b""
                while msg_to_send != b"fin":
                    # Envois de la commande
                    msg_to_send = command.get_command()
                    main_connexion.send(pickle.dumps(msg_to_send))
    
    
    

     Si quelqu'un peut éclairer ma lanterne,

    Merci d'avance

    • Partager sur Facebook
    • Partager sur Twitter
      13 août 2019 à 8:17:17

      Les instructions:

      thread_reception = MainThread('reception')
      thread_emission = MainThread('emission')

      se connectent au serveur avec un socket qui envoie des commandes sans lire le retour du serveur et un autre socket qui lit les réponses du serveur à des commandes qu'il n'a pas envoyé. En gros, le serveur voit deux clients...

      Pour avoir un seul client, il faut créer la socket avant de démarrer les threads et la passer en paramètre en plus de 'reception', 'emission'.

      • Partager sur Facebook
      • Partager sur Twitter
        13 août 2019 à 10:53:48

        Bonjour mps et merci pour ta réponse,

        J'ai bien compris le principe grace a toi, je rencontre maintenant d'autres problèmes mais je vais d'abord essayer de les résoudre moi même.

        A+

        • Partager sur Facebook
        • Partager sur Twitter

        Probleme de threads.

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown