TuTo -- Messagerie en Python (Socket & Thread) -- BiMathAx

แชร์
ฝัง
  • เผยแพร่เมื่อ 19 ธ.ค. 2024

ความคิดเห็น • 52

  • @BiMathAx
    @BiMathAx  3 ปีที่แล้ว +5

    Voici le timecode :
    0:00 - Intro Musique
    0:15 - Intro
    0:40 - Réseau Local ?
    1:45 - Création d'une messagerie simple
    7:35 - Threads
    9:30 - Création d'une messagerie complexe
    12:17 - Outro
    Bon visionnage :-)

  • @Coussini
    @Coussini ปีที่แล้ว +2

    Enfin une vidéo tellement formative convernant les socket et les trhead. Merci infiniment. C'est rapide, efficace et on comprend tout après d'avoir visionné.
    Merci !

  • @BiMathAx
    @BiMathAx  3 ปีที่แล้ว +3

    Je viens me rendre compte qu'il y avait quelques fautes d'orthographe ^^
    2:06 Port non utilisé
    5:17 Reçoit un message
    6:01 Si on perd la connection

    • @ericlenchon4826
      @ericlenchon4826 2 ปีที่แล้ว +1

      On s'en fout de l'orthographe !

  • @ACI1863
    @ACI1863 2 ปีที่แล้ว +2

    Merci pour la partie du Thread en quelque minutes tu ma expliquer quelque choses avec laquel je galérée depuis des jours

  • @saintheraudmbouma5440
    @saintheraudmbouma5440 2 ปีที่แล้ว +1

    meilleure vidéo, je cherchais une vidéo comme la tienne. Très bien expliqué! je m'abonne à ta page, super mercciiiii beaucoup

  • @citoyenx1470
    @citoyenx1470 3 ปีที่แล้ว +1

    Je cherchais une vidéo comme ça en français y’a 04mois 😅 mdrr
    Super super c’est vraiment cool qu’une personne réalise ça enfin

    • @BiMathAx
      @BiMathAx  3 ปีที่แล้ว

      Mdrr merci !

  • @yaman6804
    @yaman6804 2 ปีที่แล้ว +1

    Elle trop bien ta vidéo tu m'a fait comprendre beaucoup de choses qui m'étaient flou merci

  • @ericlenchon4826
    @ericlenchon4826 2 ปีที่แล้ว +1

    Super sympa , on a mème les codes dans le lien pour les bricoler soi mème !

  • @citoyenx1470
    @citoyenx1470 3 ปีที่แล้ว

    Vraiment t’as grave assuré
    Merci beaucoup de très bonne explication j’ai bien révisé

  • @TrixoSoloProducrion
    @TrixoSoloProducrion ปีที่แล้ว +1

    Merci tu as vraiment bien . Expliquer

  • @mihailcioclea6517
    @mihailcioclea6517 3 ปีที่แล้ว +4

    Wow c'est vraiment bien expliqué c'est vraiment la vidéo que je cherchais !
    Force à toi et continue comme ça! Le succès viendra tout seul....

    • @BiMathAx
      @BiMathAx  3 ปีที่แล้ว

      Merci beaucoup pour ton com !!!!

  • @stigmat83
    @stigmat83 2 ปีที่แล้ว

    Super cette vidéo ! Chapeau, je vais appliquer tes autres vidéos prochainement.

  • @doschplay8917
    @doschplay8917 ปีที่แล้ว +1

    merci beaucoup

  • @arnaudderison8450
    @arnaudderison8450 3 ปีที่แล้ว +1

    c'est super bien expliqué !! Par conte le système de base de messagerie est plusieurs et un server qui mets en relation tous les client mais c'est vraiment top ! Continue

    • @BiMathAx
      @BiMathAx  3 ปีที่แล้ว

      Merci bcp pour ton commentaire. Effectivement une messagerie s'organise autour d'un serveur ou plusieur client se connecte mais dans ce tuto je voulais surtout expliquer l'utilisation des sockets via une pseudo messagerie ^^

  • @AyoubAbderrahmane-e7v
    @AyoubAbderrahmane-e7v 10 หลายเดือนก่อน

    Incroyable merci

  • @sakirkilic8385
    @sakirkilic8385 2 ปีที่แล้ว +2

    Salut j'ai fais exactement la même que toi (sauf l'ip j'ai mis le mien en faisant ipconfig dans cmd) et sa marche pas l'erreur c'est :
    Traceback (most recent call last):
    File "....", Line 9, in
    socket.bind((Host, Port))
    OSError: [WinError 10049] L'addresse demandé n'est pas valide dans son contexte

  • @deborahkabisa1103
    @deborahkabisa1103 2 ปีที่แล้ว +1

    Est-ce que le même code peut marcher sur deux machines virtuelles se trouvant sur deux machines physiques différentes ?

    • @BiMathAx
      @BiMathAx  2 ปีที่แล้ว

      Si les machines physique se trouve connecter au même routeur alors oui !
      Il faut juste correctement configurer les VM pour qu'elles soient sur le même réseaux que les autres appareils / pas que l'ordinateur emul un routeur (sur VirtualBox c'est Paramètres > Network > Accès par pont)

    • @deborahkabisa1103
      @deborahkabisa1103 2 ปีที่แล้ว +1

      @@BiMathAx merci

  • @guadadvent
    @guadadvent 2 ปีที่แล้ว

    Bonjour… peut on faire la même chose avec plusieurs ordinateurs clients ?
    Merci

  • @sedoss8915
    @sedoss8915 2 ปีที่แล้ว +1

    J’ai voulu créer interface tkinter avec un bouton “Send” enfin les messages envoyés et reçu soit insérer dans un Text box mais j’ai de problème ,pouvez-vous me venir en aide plz

    • @BiMathAx
      @BiMathAx  2 ปีที่แล้ว

      Pas de pb,
      Seuleument est-ce que tu peux me partager ton code pour que je le regarde ? ( pastebin.com )

    • @sedoss8915
      @sedoss8915 2 ปีที่แล้ว

      @@BiMathAx from threading import Thread
      import socket
      from tkinter import *
      import hashlib
      from Crypto.Cipher import AES
      import base64
      class AES_pkcs5:
      def __init__(self, key: str, mode: AES.MODE_ECB = AES.MODE_ECB, block_size: int = 16):
      self.key = self.setKey(key)
      self.mode = mode
      self.block_size = block_size
      def pad(self, byte_array: bytearray):
      """
      pkcs5 padding
      """
      pad_len = self.block_size - len(byte_array) % self.block_size
      return byte_array + (bytes([pad_len]) * pad_len)
      # pkcs5 - unpadding
      def unpad(self, byte_array: bytearray):
      return byte_array[:-ord(byte_array[-1:])]
      def setKey(self, key: str):
      # convert to bytes
      key = key.encode('utf-8')
      # get the sha1 method - for hashing
      sha1 = hashlib.sha1
      # and use digest and take the last 16 bytes
      key = sha1(key).digest()[:16]
      # now zero pad - just incase
      key = key.zfill(16)
      return key
      def encrypt(self, message: str) -> str:
      # convert to bytes
      byte_array = message.encode("UTF-8")
      # pad the message - with pkcs5 style
      padded = self.pad(byte_array)
      # new instance of AES with encoded key
      cipher = AES.new(self.key, AES.MODE_ECB)
      # now encrypt the padded bytes
      encrypted = cipher.encrypt(padded)
      # base64 encode and convert back to string
      return base64.b64encode(encrypted).decode('utf-8')
      def decrypt(self, message: str) -> str:
      # convert the message to bytes
      byte_array = message.encode("utf-8")
      # base64 decode
      message = base64.b64decode(byte_array)
      # AES instance with the - setKey()
      cipher = AES.new(self.key, AES.MODE_ECB)
      # decrypt and decode
      decrypted = cipher.decrypt(message).decode('utf-8')
      # unpad - with pkcs5 style and return
      return self.unpad(decrypted)
      if __name__ == '__main__':
      # message to encrypt
      secret_key = "65715AC165715AC165715AC165715AC1"
      AES_pkcs5_obj = AES_pkcs5(secret_key)
      """ print(encrypted_message)
      decrypted_message = AES_pkcs5_obj.decrypt(encrypted_message)
      print(decrypted_message)"""
      window = Tk()
      txtMessages = Text(window, width=50)
      txtMessages.grid(row=0, column=0, padx=10, pady=10)
      txtMessages1 = Text(window, width=50)
      txtMessages1.grid(row=0, column=2, padx=10, pady=10)
      txtYourMessage = Entry(window, width=50)
      #txtYourMessage.insert(0, "Your message")
      txtYourMessage.grid(row=1, column=0, padx=10, pady=10)
      def Send(socket):
      while True:
      msg =input()
      msg = msg.encode('utf-8')
      txtMessages.insert(END, "
      " + str(msg))
      socket.send(msg)
      btnSendMessage = Button(window, text="Send", width=20)
      btnSendMessage.grid(row=2, column=0, padx=10, pady=10)
      def Reception(socket):
      while True:
      requete_server = socket.recv(500)
      requete_server = requete_server.decode("utf-8")
      print(requete_server)
      txtMessages.insert(END, "
      " + requete_server)
      def Decrypte():
      pass
      btnSendMessage1 = Button(window, text="Decryte", width=20, command=Decrypte)
      btnSendMessage1.grid(row=4, column=0, padx=10, pady=10)
      Host = "127.0.0.1"
      Port = 6397
      #Création du socket
      socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
      socket.connect((Host,Port))
      envoi = Thread(target=Send,args=[socket])
      recep = Thread(target=Reception,args=[socket])
      envoi.start()
      recep.start()
      window.mainloop()

    • @sedoss8915
      @sedoss8915 2 ปีที่แล้ว

      @@BiMathAx from threading import Thread
      import socket
      from tkinter import *
      import hashlib
      from Crypto.Cipher import AES
      import base64
      class AES_pkcs5:
      def __init__(self, key: str, mode: AES.MODE_ECB = AES.MODE_ECB, block_size: int = 16):
      self.key = self.setKey(key)
      self.mode = mode
      self.block_size = block_size
      def pad(self, byte_array: bytearray):
      """
      pkcs5 padding
      """
      pad_len = self.block_size - len(byte_array) % self.block_size
      return byte_array + (bytes([pad_len]) * pad_len)
      # pkcs5 - unpadding
      def unpad(self, byte_array: bytearray):
      return byte_array[:-ord(byte_array[-1:])]
      def setKey(self, key: str):
      # convert to bytes
      key = key.encode('utf-8')
      # get the sha1 method - for hashing
      sha1 = hashlib.sha1
      # and use digest and take the last 16 bytes
      key = sha1(key).digest()[:16]
      # now zero pad - just incase
      key = key.zfill(16)
      return key
      def encrypt(self, message: str) -> str:
      # convert to bytes
      byte_array = message.encode("UTF-8")
      # pad the message - with pkcs5 style
      padded = self.pad(byte_array)
      # new instance of AES with encoded key
      cipher = AES.new(self.key, AES.MODE_ECB)
      # now encrypt the padded bytes
      encrypted = cipher.encrypt(padded)
      # base64 encode and convert back to string
      return base64.b64encode(encrypted).decode('utf-8')
      def decrypt(self, message: str) -> str:
      # convert the message to bytes
      byte_array = message.encode("utf-8")
      # base64 decode
      message = base64.b64decode(byte_array)
      # AES instance with the - setKey()
      cipher = AES.new(self.key, AES.MODE_ECB)
      # decrypt and decode
      decrypted = cipher.decrypt(message).decode('utf-8')
      # unpad - with pkcs5 style and return
      return self.unpad(decrypted)
      if __name__ == '__main__':
      # message to encrypt
      secret_key = "65715AC165715AC165715AC165715AC1"
      AES_pkcs5_obj = AES_pkcs5(secret_key)
      """print(encrypted_message)
      decrypted_message = AES_pkcs5_obj.decrypt(encrypted_message)
      print(decrypted_message)"""
      window = Tk()
      txtMessages = Text(window, width=50)
      txtMessages.grid(row=0, column=0, padx=10, pady=10)
      txtMessages1 = Text(window, width=50)
      txtMessages1.grid(row=0, column=2, padx=10, pady=10)
      txtYourMessage = Entry(window, width=50)
      #txtYourMessage.insert(0, "Your message")
      txtYourMessage.grid(row=1, column=0, padx=10, pady=10)
      def Send(client):
      while True:
      msg = input()
      msg = msg.encode("utf-8")
      txtMessages.insert(END, "
      " + str(msg))
      client.send(msg)
      btnSendMessage = Button(window, text="Send", width=20)
      btnSendMessage.grid(row=2, column=0, padx=10, pady=10)
      def Reception(client):
      while True:
      requete_client = client.recv(500)
      requete_client = requete_client.decode('utf-8')
      print(requete_client)
      txtMessages.insert(END, "
      " + requete_client )
      if not requete_client : #Si on pert la connexion
      print("CLOSE")
      break
      def Decrypte():
      pass
      btnSendMessage1 = Button(window, text="Decryte", width=20, command=Decrypte)
      btnSendMessage1.grid(row=4, column=0, padx=10, pady=10)
      Host = "127.0.0.1"
      Port = 6397
      #Création du socket
      socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
      socket.bind((Host,Port))
      socket.listen(1)
      #Le script s'arrête jusqu'a une connection
      client, ip = socket.accept()
      print("Le client d'ip",ip,"s'est connecté")
      envoi = Thread(target=Send,args=[client])
      recep = Thread(target=Reception,args=[client])
      envoi.start()
      recep.start()
      recep.join()
      client.close()
      socket.close()
      window.mainloop()

    • @sedoss8915
      @sedoss8915 2 ปีที่แล้ว

      @@BiMathAx client et server codes , merci d’avance

  • @saysay2022des
    @saysay2022des 2 ปีที่แล้ว +1

    j'ai cette erreur tous le temps:
    Traceback (most recent call last):
    File "/home/connect/Documents/Python/SayMail/client.py", line 7, in
    socket.connect((Host,Port))
    OSError: [Errno 101] Network is unreachable

  • @arthursarrey5023
    @arthursarrey5023 2 ปีที่แล้ว +1

    yo, est-ce que tu pourrais faire une vidéo sur une messagerie comme celle ci mais pour envoyer des message a quelqu'un d'un autre réseaux wifi ?
    si non, est ce que tu saurais où est ce que je pourrais trouver comment faire ?
    Merci

    • @BiMathAx
      @BiMathAx  2 ปีที่แล้ว

      Je suis entrain de me renseigner la dessus car je sais comment faire ceci mais je ne sais pas encore comment le sécuriser pour chiffrer les messages...

    • @arthursarrey5023
      @arthursarrey5023 2 ปีที่แล้ว +1

      @@BiMathAx ok ok merci en attendant je m'abonne 😁

  • @esaienaroum
    @esaienaroum 2 ปีที่แล้ว

    superbe vidéo. merci vraiment.
    mais comment faire pour un groupe de trois personnes qui souhaitent communiquer entre elles via le serveur ? trois clients et un serveur.

  • @nicodelanoche
    @nicodelanoche 2 ปีที่แล้ว

    Salut ! merci pour cette vidéo bien expliquée ! je cherchais justement comment envoyé un message entre la même application tkinter sur 2 pc différents ! mais une question se pose , dois je avoir le code serveur et le code client sur le même fichier pour que chacun puisse communiquer a n importe quel moment ?

  • @FabriceFalque
    @FabriceFalque 2 ปีที่แล้ว

    Bonjour, bonne vidéo trés interressante. Comment modifier le code pour avoir plusieurs clients ? Merci d'avance

  • @MANGATECHNOLOGY
    @MANGATECHNOLOGY 2 ปีที่แล้ว

    Svp je n'arrive pas à le faire comme toi chez moi ça marche pas tu as utilisé quoi au juste ?

  • @yakamozgames2301
    @yakamozgames2301 3 ปีที่แล้ว +1

    juste quel est le logiciel utilisé pour le script ?

    • @BiMathAx
      @BiMathAx  3 ปีที่แล้ว

      Visual Studio Code 👍

    • @yakamozgames2301
      @yakamozgames2301 3 ปีที่แล้ว +1

      @@BiMathAx ok merci

    • @yakamozgames2301
      @yakamozgames2301 3 ปีที่แล้ว

      @@BiMathAx et comment lancer le programme dans le terminal ?

    • @ericlenchon4826
      @ericlenchon4826 2 ปีที่แล้ว

      @@yakamozgames2301 python3 client.py par exemple

  • @CrashTeamTendo
    @CrashTeamTendo 3 ปีที่แล้ว +4

    Salut !
    Tes vidéos sont génial !
    J’ai une petite question :
    Est-ce qu’une vidéos pour connecter plusieurs appareils ensemble grâce aux socket sera possible ?
    Merci

    • @BiMathAx
      @BiMathAx  3 ปีที่แล้ว +3

      Salut, tout d'abord merci bcp pour ton commentaires !
      Si par connecter plusieurs appareils ensemble tu entends faire communiquer 2 PC pour transférer des fichiers, avoir un shell... Oui tu peux le faire avec les sockets.
      En fait, tu peux presque tout faire avec car ils sont la base des protocoles réseaux ^^
      J'ai fait un projet perso qui permet de transférer des fichiers grâce aux sockets mais je ne sais pas si je vais en faire une vidéo...

    • @isipro
      @isipro 2 ปีที่แล้ว +2

      ​@@BiMathAxSuper cette vidéo ! Mise à part l'accent, bravo de t'être lancé sur youtube.
      Salut, j'essaye de faire un logiciel (gui avec tkinter) comprenant un server et plusieurs clients :
      Le serveur reçoit tous les messages de chaque clients en continu, puis renvoi à chaque client le même message, ainsi, les autres clients reçoivent le message. Tu pourrais faire une vidéo sur ca stp ?
      Edit: Le serveur ne peut donc pas envoyer de message mais sert de "server", donc il établit un lien entre chaque client, pour que chaque client ai la même discussion... (un genre de chat en groupe).

    • @BiMathAx
      @BiMathAx  2 ปีที่แล้ว +1

      @@isipro J'ajoute cela aux futures videos (que je tournerai de retour chez moi...) !

    • @isipro
      @isipro 2 ปีที่แล้ว

      ​@@BiMathAx D'acc, bonne vacance !

    • @esaienaroum
      @esaienaroum 2 ปีที่แล้ว

      @@BiMathAx moi j'attends toujours cette vidéo grand Monsieur.🙏

  • @montagnes8124
    @montagnes8124 2 ปีที่แล้ว +1

    J'essaie les deux codes serveur et client chacun dans 2 ordinateurs différents du même réseau local, mais ça ne fonctionne pas.

    • @BiMathAx
      @BiMathAx  2 ปีที่แล้ว

      Salut, cela est assez surprenant !
      Est-ce que tu peux me partager ton code avec les commandes que tu as écrites pour le start ? (pastebin.com)
      merci

  • @ronaldo_ditzz
    @ronaldo_ditzz 10 หลายเดือนก่อน

    C quoi ; Traceback (most recent call last): File "/home/connect/Documents/ Python/SayMail/client.py", line 7, in socket.connect((Host,Port)) OSError: [Errno 101] Network is unreachable

  • @Redfly500
    @Redfly500 ปีที่แล้ว

    J'ai étonnement beaucoup de mal à ajouter un système de pseudonymes à ton code