Transfert de données via socket / send - receive
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 :
Code:
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 "" |
Méthode d'envoi :
Code:
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' ') |
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.
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 :
Code:
1 2 3 4 5
| while True:
data = conn.recv(1)
#code
if not data:
break |
Mais dans mon cas ça marche pas, mon 'conn.recv(1024)' attend toujours des données et il ne renvoie pas False.
Merci d'avance pour votre aide, ou vos conseils,
Bonne journée.