Accueil » Python » Forums Python » Forum Twisted Python » Transfert de fichier

 • Transfert de fichier

Document Actions
Réponses: 1   Visites: 1438
Up one level
Vous devez être un membre enregistré pour contribuer sur ce forum. Inscrivez-vous maintenant
Sujet précédent | Sujet suivant

 • Transfert de fichier

Posté par PNprog le 08/12/2006 02:01
Bonjours tout le monde,

Je voudrais programmer un petit logiciel (un client et un serveur en réalité) avec Twisted, qui permet l'envoie de données d'un ordinateur à un autre, à la façon des clients de messagerie, ou des logiciels p2p.

Je précise que je ne connais pas grand chose à la programmation réseau, c'est d'ailleurs ma principale motivation à faire ce programme.

Donc ma question est très simple: comment réaliser ça avec Twisted ?

Pour l'instant, j'ai fait quelques "expérimentations", qui fonctionnent (j'ai la documentation en ligne de Twistedmatrix), ce qui donne comme protocoles :

Pour le client:
code:
class ClientProtocolTest(protocol.Protocol): 
def connectionMade(self):
print "Début du transfert..."
fichier=open('a_envoyer.txt','rb')
self.transport.write(fichier.read())
fichier.close()
self.transport.loseConnection()


Et pour le serveur:
code:
class ServeurProtocolTest(basic.LineReceiver):
def dataReceived(self, data):
print 'reception en cours...'
fichier=open('reception.txt','w')
fichier.write(data)
fichier.close()
print 'fini.'


Bon, ça marche (c'est déjà pas mal), mais je ne sais pas ce que ça vaut.

Donc plusieurs questions :
Est-ce la bonne méthode pour transférer des fichiers. Ca marche sur un fichier texte pas très lourd, mais est-ce que ça marchera pour des gros fichiers de plusieurs Mo ? J'ai essayé avec un fichier binaire de 12Mo mais ça n'a pas l'air de marcher: il affiche plein de "reception en cours"/"fini" mais semble se bloquer, et le fichier obtenu fait 4.2Ko.

Faut-il alors le découper en plusieurs envoies ?
Et dans ce cas deux questions : qu'elle est la taille appropriée des paquets ?
Comment faire ça avec Twisted ? faut il envoyer un paquet, puis déconnecter (self.transport.loseConnection()) puis se reconnecter avec le protocole Factory, envoyer un autre paquet et ainsi de suite ?

Et enfin, je ne sais pas quelle est la différence entre dataReceived, et RawdataReceveid, lequel faut-il utiliser ?

Enfin bref, si vous pouviez éclairer ma lanterne :)
Ou me rediriger vers de la documentation en ligne.

Merci !
PNprog

 • Re: Transfert de fichier

Posté par lstep le 27/06/2007 17:51
Non, tu ne peux pas transférer de gros fichiers de cette manière parce qu'l y a un buffer (dont je ne connais pas la taille, mais c'est pas gros). Si tu veux transférer de gros fichiers de cette manière, il faudra que tu supportes/implémente un mini protocole pour récupérer et découper tes données en petits bouts.
Peut-être que c'est déjà implémenté si tu utilises twisted.spread.pb qui est une surcouche dans Twisted.
Il y a plusieurs messages dans la mailing list à ce sujet .