Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème avec les sockets

    12 mai 2022 à 22:33:17

    Bonjour/Bonsoir,

    J'ai pour but de créer un petit jeu en ligne qui resterait entre mes amis et moi. J'ai un serveur à disposition donc j'ai comme idée de créer une sorte de mini mmorpg (vraiment très rudimentaire). Sauf que je galère avec les sockets et que je ne trouve pas de solution à mon problème et pas d'alternative.

    En local tout fonctionne parfaitement mais dés que mon pote veut se connecter au serveur sur mon pc la connexion est systématiquement refusée. J'ai essayé de mettre 0.0.0.0 comme ip pour mon serveur et d'autoriser les connexions privées (pop-up firewall) mais ça ne fonctionne toujours pas. J'ai aussi essayé plein de ports différents, rien. 

    Quelqu'un pourrait-il m'aider svp ? 

    Code du serveur : 

    import socket
    from threading import Thread
    
    HOST = '0.0.0.0'
    PORT = 5555
    
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    
    def new_client(conn,addr):
        while True:
            try:
                msg = conn.recv(2048)
                print(msg.decode())
                msg = msg.decode() + ' Reçu 5/5'
                conn.sendall(msg.encode())
            except:
                break
        print('Connexion perdue avec', addr)    
        conn.close()
    
    s.bind((HOST, PORT))
    s.listen(5)
    
    while True:
        conn, addr = s.accept()
        print('Connexion établie avec', addr)
        Thread(target=new_client, args=(conn,addr)).start()
    
    s.close()

    Code du client :

    import socket
    from threading import Thread
    from tkinter import *
    
    HOST = input('IP du serveur : ')
    PORT = int(input('Port du serveur : '))
    
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.connect((HOST, PORT))
    
    master = Tk()
    e = Entry(master)
    e.pack()
    e.focus_set()
    
    def received():
        while True:
            try:
                msg = s.recv(2048)
                print(msg.decode())
            except:
                print('Erreur')
                break
    
    Thread(target=received).start()
    def input_msg():
        msg = e.get()
        print('Moi >> ', msg, '\n')
        s.sendto(msg.encode(),(HOST, PORT))
    
    b = Button(master, text = 'OK', width = 10, command = input_msg)
    b.pack()
    
    mainloop()

    Merci d'avance 

    • Partager sur Facebook
    • Partager sur Twitter

    LeGlaude

      13 mai 2022 à 2:27:38

      J'avais fait un petit test avec un serveur et quelqques clients locaux.
      Évidemment les clients donnaient comme host 'localhost' mais tu devras donner le numéro du host.
      Pour le serveur, le host est une chaîne vide:  host = ''
      À moins que tu fasses un gros traitement pour chaque client, tu ne devrais pas utiliser les thread dans le serveur.

      -
      Edité par PierrotLeFou 13 mai 2022 à 3:02:28

      • Partager sur Facebook
      • Partager sur Twitter

      Le Tout est souvent plus grand que la somme de ses parties.

        13 mai 2022 à 21:12:53

        Et bien je compte faire des gros traitements par client. Je n'ai pas très bien compris ce que vous essayez de m'expliquez en fait. En local tout fonctionne parfaitement mais c'est dés que j'essaye de me connecter au serveur via l'ip publique sur internet ça ne fonctionne pas, mes amis n'arrivent pas à se connecter. 

        -
        Edité par LeGlaude_ 14 mai 2022 à 13:19:36

        • Partager sur Facebook
        • Partager sur Twitter

        LeGlaude

          14 mai 2022 à 1:03:12

          En ce qui concerne la question immédiate, c'est un problème d'ouverture/redirection de Port (règles NAT/PAT) au niveau de la ou des passerelles qui séparent le réseau locale d'internet. Probablement une box quelconque à configurer.

          En ce qui concerne le code présenté, autant ne pas capturer les exceptions si c'est pour ne rien en faire !

          • Partager sur Facebook
          • Partager sur Twitter
            14 mai 2022 à 1:05:12

            Je ne suis pas expérimenté en anti-virus et pare-feu.
            Est-tu certain que tu as configuré le tien pour laisser passer le port 5555 ?
            Si le serveur fait beaucoup de travail pour chaque client, c'est correct d'utiliser les thread.

            @ЯК: tu m'as doublé ...

            -
            Edité par PierrotLeFou 14 mai 2022 à 1:08:01

            • Partager sur Facebook
            • Partager sur Twitter

            Le Tout est souvent plus grand que la somme de ses parties.

            Problème avec les sockets

            × 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