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:
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:
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