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 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107
   | """Module client pour lancement de commande à distance"""
 
#!/usr/bin/env python3
# -*- coding : utf-8 -*-
 
import socket
import sys
import threading
import _thread
 
class SendCommand(threading.Thread):
    """Envoyer un message/commande"""
    def __init__(self, connexion):
        threading.Thread.__init__(self)
        self.connexion = connexion
        self.exits = False
        nom = self.getName()
        print("thread d'envoi : "+nom)
 
    def input_timeout(self, prompt, timeout=0.001):
        """Stop le prompt régulièrement et vérifie si le flag d'arrêt du thread toujours vrai"""
        #print(prompt,)
        timer = threading.Timer(timeout, _thread.interrupt_main)
        message = None
        if not self.exits:
            try:
                timer.start()
                message = input(prompt)
            except KeyboardInterrupt:
                pass
            timer.cancel()
            return message
 
    def run(self):
        """Fonction d'émission de message"""
        while not self.exits:
            command = self.input_timeout("---")
            if command != "":
                self.connexion.send(command.encode("UTF-8"))
            else:
                pass
        self.connexion.send("Déconnexion".encode("UTF-8"))
        print("Sortie de boucle envoi")
        RECEIVER.quit()
 
    def quit(self):
        """Active le flag pour quitter le thread"""
        self.exits = True
 
 
class ReceiverMessage(threading.Thread):
    """Recevoir un message d'un client"""
    def __init__(self, connexion):
        threading.Thread.__init__(self)
        self.connexion = connexion
        self.exit = False
        nom = self.getName()
        print("thread de réception : "+nom)
 
    def run(self):
        """Fonction de reception de message"""
        while 1:
            message = self.connexion.recv(1024).decode("UTF-8")
            if message.upper() == "QUIT":
                break
            elif message != "":
                print("*"+message+"*")
        print("Sortie de boucle réception")
        SENDER.quit()
        print("fin sender")
 
    def quit(self):
        """Active le flag pour quitter le thread"""
        self.exit = True
 
 
if __name__ == '__main__':
    HOST = '192.168.1.90'
    PORT = 7998
 
CONNEXION = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
 
try:
    CONNEXION.connect((HOST, PORT))
except socket.error:
    print('Connexion impossible')
    sys.exit()
 
print('Connexion établie')
 
SENDER = SendCommand(CONNEXION)
RECEIVER = ReceiverMessage(CONNEXION)
SENDER.start()
RECEIVER.start()
print("A")
SENDER.join()
RECEIVER.join()
print("B")
#SENDER.quit()
# print("C")
 
# print("D")
 
 
CONNEXION.close()
 
print('Fin de la connexion avec le serveur') | 
Partager