Python Je ne reçois que le premier paquet !

Inscrit
26 Février 2016
Messages
82
Reactions
0
#1
Bonjour, j'ai un problème, je ne reçois que le premier paquet envoyé par mon client, car normalement il est censé m'en envoyé plusieurs mais il m'en envoie qu'un seul. Le problème doit venir d'une boucle ou d'un Thread mal fait car il s'arrête au premier paquet reçus.

Python:
# -*- coding: utf-8 -*-

from Database import DatabaseConnection
import socket
from threading import Thread

class Receved(Thread):

    def receved(self):
        while True:
            data = client.recv(2000)
            print(data)
            if not data:
                break
            else:
                # On traite tous les packets que l'on reçoit
                if data == b'<policy-file-request/>\x00':
                    send(str.encode('<!DOCTYPE cross-domain-policy SYSTEM "http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd">\r\n<cross-domain-policy>\r\n\t<allow-access-from to-ports="12301-12321" domain="127.0.0.1" />\r\n\t<allow-access-from to-ports="12301-12321" domain="127.0.0.1" />\r\n\t<allow-access-from to-ports="12301-12321" domain="127.0.0.1" />\r\n</cross-domain-policy>'))
                elif data == b'\x01\x03\r\x08\xc0\x00':
                    send(str.encode('\x01\x03\r\xc8\xf0\x6c\x01\x03\x00'))


VERSION = '1.0'
HOST = '127.0.0.1'
PORT = 55555

def send(packet):
    client.send(packet)

print('-----[Serveur | Version {0}]-----'.format(VERSION))
print('Chargement du Serveur...')

print('Le serveur est connecté sur le port {0}...'.format(PORT))
print('En attente de connexion...')
Sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
Sock.bind((HOST, PORT))
Sock.listen(100)
client, adresse = Sock.accept()
print('Le client {0} vient de se connecter au serveur !'.format(str(adresse)))
thread = Receved()
thread.receved().start()
print("Le client {0} vient de se déconnecter !".format(str(adresse)))
client.close()
Merci à ceux qui m'aideront ! :)
 
Dernière édition par un modérateur:

BlueDream

Administrateur
Membre du personnel
Inscrit
8 Decembre 2012
Messages
2 010
Reactions
149
#2
Ajout de la coloration syntaxique python.
 

Labo

Membre Actif
Inscrit
16 Aout 2013
Messages
799
Reactions
15
#3
Alors déjà, ton thread est fait n'importe comment. Regarde sur http://python.developpez.com/faq/?page=Thread
Ensuite, ton code est très mal foutu, client est une variable globale utilisée dans un thread.
Enfin, pour répondre à ta question, je pense que tu n'envoies pas les bons paquets. Compare une capture wireshark de la communication normale et la tienne.
 
Inscrit
26 Février 2016
Messages
82
Reactions
0
#4
Alors déjà, ton thread est fait n'importe comment. Regarde sur http://python.developpez.com/faq/?page=Thread
Ensuite, ton code est très mal foutu, client est une variable globale utilisée dans un thread.
Enfin, pour répondre à ta question, je pense que tu n'envoies pas les bons paquets. Compare une capture wireshark de la communication normale et la tienne.
Effectivement, ton lien m'a bien aidé.
Lorsque j'envoie le premier paquet, ma socket ce close en quelque sorte et je ne reçois pas les autres paquets, or si je relance le programme après le premier packet reçu, je reçois tous les autres. Je ne comprends pas trop..
 

BlueDream

Administrateur
Membre du personnel
Inscrit
8 Decembre 2012
Messages
2 010
Reactions
149
#5
Le serveur répond à un Ping ?

BasicPingMessage d'id 82
 

BlueDream

Administrateur
Membre du personnel
Inscrit
8 Decembre 2012
Messages
2 010
Reactions
149
#7
Autant pour moi, tu devrais facilement trouver l'équivalent pour ton jeu.
 
Inscrit
26 Février 2016
Messages
82
Reactions
0
#8
Autant pour moi, tu devrais facilement trouver l'équivalent pour ton jeu.
D'accord, je vais alors chercher davantage !
Mais que voulais-tu dire par rapport au serveur qui répond à un ping?
 
Dernière édition par un modérateur:

BlueDream

Administrateur
Membre du personnel
Inscrit
8 Decembre 2012
Messages
2 010
Reactions
149
#9
L’intérêt du ping dans ton cas est de savoir si la connexion est toujours ouverte et si le serveur traite bien les paquets que tu lui envoi.
C'est la première chose que j'aurai fait en me trouvant bloqué face à un nouveau protocole, après cela ne va rien régler mais cela peut nous orienter.
 
Haut Bas