Bonjour à tous,
Je rédige ce post dans l'espoir que vous puissiez m'aider à résoudre le problème qui se présente à moi en ce moment, je m'explique.
Dans mon programme en python, j'ai une interaction entre un client et un serveur, et avec eux deux, j'utilise des méthodes que j'ai créées qui envoient ou reçoivent des données.
Les fonctions sont les suivantes :
Méthode de réception :
Méthode d'envoi :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 def receive(connexion): # connexion = socket data = b'' while True: result = connexion.recv(1024) if not result or result == b' ': break data += result if not data == b'': return data.decode() else: return ""
Donc en l'état actuel, j'envoie mon 'data' par paquet de 1024 octets, et une fois que le 'data' a été entièrement envoyé, j'envoie un espace afin de faire comprendre à celui qui reçoit que j'ai fini mon envoi.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 def send(connexion, data): # connexion = socket; data = la chaine à envoyer encoded_data = data.encode() g = (encoded_data[i:i+1024] for i in range(0, len(encoded_data), 1024)) for d in g: connexion.send(d) time.sleep(0.2) connexion.send(b' ')
Mon problème est le suivant, je n'arrive pas à trouver une manière moins "brute" pour signaler la fin de 'data', que l'envoi de cet espace. J'ai cherché un caractère EOF, mais il n'en existe pas en Python d'après mes recherches.
J'ai également vu sur plusieurs forums que certains utilisateurs utilisaient ça :
Mais dans mon cas ça marche pas, mon 'conn.recv(1024)' attend toujours des données et il ne renvoie pas False.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 while True: data = conn.recv(1) #code if not data: break
Merci d'avance pour votre aide, ou vos conseils,
Bonne journée.
Partager