Réecriture des méthodes send et recv pour les sockets

Soyez le premier à donner votre avis sur cette source.

Snippet vu 8 158 fois - Téléchargée 37 fois

Contenu du snippet

Il arrive souvent que l'on ne recoivent pas toute les informations attendu lors d'une connexion rézeau en python, il faut pour cela s'assurer que l'on a bien recu toutes les informations et pas seulement une partie, ici on réecris la méthode d'envoie et de réception qui ajoute la taille des informations à envoie/recevoir sur les 4 premiers caractères.

Source / Exemple :


class MaSocket:

	def __init__(self,socket):
		self.s = socket
			
	def send_data(self,data):

		taille = len(data) + 4
		prefixe =""
		for i in range(4):
			reste = taille % 256
			taille = taille // 256

			prefixe = chr(reste) + prefixe

		data = prefixe + data
		self.s.send(data)

	def recieve_data(self):

		data = self.s.recv(BUFFER_SIZE)
		len_data_recu = len(data)
		prefixe = data[:4]
		taille = 0
		for i in range(4):
			taille = taille * 256 + ord(prefixe[i]) 
		taille = taille - len_data_recu
		while taille > 0:
			new_data = self.s.recv(BUFFER_SIZE)
			data = data + new_data 
			taille = taille - len(new_data)
		return data[4:]

A voir également

Ajouter un commentaire Commentaire
Messages postés
2
Date d'inscription
mardi 20 janvier 2004
Statut
Membre
Dernière intervention
16 juillet 2005

il est preferable (j'en ai eu l'experience) de faire une boucle pour la reception de l'entete

du genre:

lire le socket tant qu'on a pas les X caracteres de l'entete (generalement 4 pour identifier l'entete et 4 pour preciser la taille du message)

une fois qu'on a recu une entete correct on connait la taille du message a ecouté.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.