Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème réseaux avec les sockets en Python

Un client qui envoie un message à un autre client

    2 janvier 2022 à 12:57:31

    Bonjour tout le monde !

    J'ai un petit problème, je travaille actuellement en python sur les serveurs sockets.

    Ce que j'essaie de faire est qu'un client puisse envoyer des données à un autre client. J'arrive pas,

    j'ai essayé plein de fois même avec la fonction sendto.

    Merci à celui qui peut m'aider.

    • Partager sur Facebook
    • Partager sur Twitter
      9 janvier 2022 à 10:50:21

      Bonjour, poste ton code, ça peut venir de plein de choses différentes :)

      • Partager sur Facebook
      • Partager sur Twitter
        13 janvier 2022 à 17:04:19

        Oh désolé de ne pas t'avoir répondu, je n'avais pas vu la notification !

        C'est assez difficile, mon code est faux, ce que je veux précisément, c'est que le client 1 qui est connecté puisse envoyer un message au serveur, puis le serveur renvoie le message vers le client 2, je sais pas comment faire.

        Merci en tout cas de m'avoir répondu!

        • Partager sur Facebook
        • Partager sur Twitter
          13 janvier 2022 à 22:22:26

          Pas de souci ;)

          Est-ce que tu as essayé de commencer par la doc python à ce sujet ? C'est assez bien fait : https://docs.python.org/fr/3/howto/sockets.html

          Si tu as besoin d'aide pour comprendre une partie n'hésite pas à poser des questions

          • Partager sur Facebook
          • Partager sur Twitter
            14 janvier 2022 à 11:22:23

            Ce que j'essaie de faire, c'est une petite messagerie via l'invite de commande. C'est deux client qui doivent se connecté au serveur, puis un des deux clients doit envoyer un message, enfin le serveur fait transiter le message et l'envoie vers l'autre client.

            Il me semble que dans la documentation, il y a une méthode sendto("message", adresse), mais je n'arrive pas à obtenir l'adresse du second client.

            En tout cas merci pour ton aide.

            • Partager sur Facebook
            • Partager sur Twitter
              16 janvier 2022 à 18:17:14

              Je te recommande lire le lien que j'ai posté dans mon dernier message pour comprendre les bases des sockets en python.

              Tu peux déjà commencer par connecter un client à un serveur, et essaie de transmettre l'information de l'un à l'autre. Une fois que tu auras cette base, compléter ton projet sera plus simple !

              Le souci c'est qu'avec le peu d'informations que tu donnes, c'est compliqué de savoir où tu en es et comment t'aider pertinemment. Qu'as tu déjà réussi à faire ? Ouvrir une socket et t'y connecter ? Transmettre de l'information ? Le plus de détails tu donnes, le plus simple ça sera de t'aider :)

              • Partager sur Facebook
              • Partager sur Twitter
                17 janvier 2022 à 17:53:15

                Oui je sais envoyer des informations et même utiliser des threads pour faire les deux (recevoir et envoyer)

                Voici un exemple d'échange d'information entre un client et un serveur:

                Serveur :

                import socket, threading
                 
                adresse = ("", 5555)
                 
                serveur = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
                serveur.bind(adresse)
                 
                serveur.listen(3)
                 
                def send(conn):
                    message = "Salut".encode()
                    conn.send(message)
                 
                def receive(conn):
                    message = conn.recv(1000).decode("utf-8")
                    print(message)
                 
                while True:
                    connexion, adrr = socket.accept()
                    thread1 = threading.Thread(target=send, args=[connexion])
                    thread2 = threading.Thread(target=receive, args=[connexion])
                    while True:
                        thread1.start()
                        thread2.start()
                 
                        thread1.join()
                        thread2.join()
                    
                    connexion.close()
                serveur.close()

                Client :

                import socket, threading
                
                adresse = ("", 5555)
                
                client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
                
                def send(client):
                    message = "Salut".encode()
                    client.send(message)
                 
                def receive(client):
                    message = client.recv(1000).decode("utf-8")
                    print(message)
                
                try:
                    client.connect(adresse)
                    print("Connecté")
                
                    while True:
                        thread1 = threading.Thread(target=send, args=[client])
                        thread2 = threading.Thread(target=receive, args=[client])
                        while True:
                            thread1.start()
                            thread2.start()
                    
                            thread1.join()
                            thread2.join()
                except:
                    print("Connexion au serveur échoué !")
                finally:
                    client.close()



                Maintenant, ce que je veux c'est que deux clients communiquent ensembles.


                -
                Edité par WalterO'Brian1 17 janvier 2022 à 18:01:38

                • Partager sur Facebook
                • Partager sur Twitter
                  17 janvier 2022 à 19:21:40

                  Bonjour,

                  Ce que tu peux faire simplement dans un premier temps est une sorte de broadcast.

                  C'est à dire que tous les messages, envoyés à ton serveur depuis un client, sont retransmis à tous les autres clients connectés.

                  • Partager sur Facebook
                  • Partager sur Twitter
                    17 janvier 2022 à 21:27:48

                    Bonjour à toi.

                    Merci pour la réponse, mais tu pourrais me guider sur le code ?

                    • Partager sur Facebook
                    • Partager sur Twitter
                      20 janvier 2022 à 18:58:29

                      Bonjour,

                      Déjà il faut un code de serveur et client propre et qui fonctionne... Ce qui n'est pas le cas de tes « exemples ».

                      Je te conseille d’abandonner les threads pour le client.

                      Si tu n'es pas capable de produire le code, tu peux t'inspirer de nombreux exemples de petits chat en TCP disponibles sur le net (c'est un exercice très courant pour découvrir les threads et les sockets en programmation).

                      Je l'ai fait en Java il y a quelques années de ça, et tout simplement, voilà les étapes:

                      1) Avoir un serveur et un client capables de s'échanger des données en TCP, le serveur étant capable d'accepter une connexion et le client d'en initier une.

                      2) Modifier le serveur pour qu'il accepte des connexions de plusieurs client (avec les threads).

                      3) Permettre au serveur d'envoyer des données à tous les clients en même temps (avec une collection de flux sortants stockées d'une manière ou d'une autre par exemple).

                      4) Relayer tous les messages reçus d'un client aux autres clients (en utilisant 3)) sauf au client qui a émit le message.

                      Bien sûr le but n'est pas de bricoler pour atteindre le but de chaque étape (ça rendra uniquement l'étape suivante plus complexe à réaliser) mais de produire un code cohérent et solide (que l’interpréteur peut au moins exécuter).

                      -
                      Edité par KoaTao 20 janvier 2022 à 19:04:13

                      • Partager sur Facebook
                      • Partager sur Twitter
                        20 janvier 2022 à 19:14:12

                        Merci, je vais travailler ça !
                        • Partager sur Facebook
                        • Partager sur Twitter
                          24 janvier 2022 à 1:10:57

                          Salut ,

                          J'ai déjà créé un script du genre  si ça t'intéresse envoie moi un MP.

                          • Partager sur Facebook
                          • Partager sur Twitter

                          Problème réseaux avec les sockets en Python

                          × 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