cs_bigboss9
Messages postés162Date d'inscriptionjeudi 22 janvier 2004StatutMembreDernière intervention20 juillet 2013
-
10 août 2011 à 14:38
rami -
13 mai 2016 à 03:27
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
Vraiment merci pour ton exemple, tu m'as fais découvrir la "déserialization" d'objets :).
Sorpia.
The Meteorologist
Messages postés232Date d'inscriptionjeudi 18 janvier 2007StatutMembreDernière intervention 3 novembre 20111 30 août 2011 à 16:18
Concernant l’intégrité des données, un contrôle MD5 est a priori superficiel. Le protocole TCP/IP inclut automatiquement un checksum dans l'en-tête de tous les paquets échangés. Il garantit donc que le fichier ne sera pas corrompu à son arrivée ;)
Avant j'utilisais les méthodes ReadAllBytes/WriteAllBytes, qui sont très pratiques mais qui sont limitées; j'étais bloqué à environ 60mo.
Maintenant je lis le fichier par paquets de 32768 bits, paquets qui sont envoyés dans la foulée, et c'est pareil côté réception, le fichier est écrit petit à petit.
Après quelques tests, j'ai pu transférer un fichier de 6.4go, avec des perfs qui me semble correctes
elassas
Messages postés3Date d'inscriptionmardi 25 novembre 2008StatutMembreDernière intervention24 juillet 2009 16 août 2011 à 11:53
Salut,
Comment le programme réagit au transfert de fichiers de plus de 10 GO ?
Merci de ton avis.
J'ai posté cette source volontairement simpliste parce que justement, je ne trouvais pas de code permettant un transfert fiable; les solutions proposées utilisent souvent les méthodes Read() et Write() des classes NetworkStream ou Socket, ce qui m'a donné des résultats très aléatoires.
Avec cette méthode, j'arrive à transférer un fichier audio de presque 8mo sans qu'il soit corrompu.
Cela dit, l'idée du checksum est bonne.
Concernant l'échange "intelligent", ça va un peu plus loin, mais c'est intéressant, j'essaierai d'adapter ça à l'occasion.
Encore une fois, le but de cette source est de donner une méthode simple et fiable pour transférer un fichier, je ne pense pas y apporter des modifs (ou alors, dans un zip à part)
cs_bigboss9
Messages postés162Date d'inscriptionjeudi 22 janvier 2004StatutMembreDernière intervention20 juillet 2013 10 août 2011 à 14:38
C'est un bon début mais il ne faudrait pas s'arrêter là.
Des points à améliorer :
- Aucune protection dans ton code permet de vérifier que le fichier envoyé est bien celui réceptionné. Un simple Hash MD5 ferait l'affaire histoire d'apporter un brun de sécurité.
- D'autre part, tu pourrais implémenter une file FIFO afin de réceptionner chaque paquet permettant ainsi d'envisager l'interruption de l'envoi.
Lors de la communication de chaque paquet, tu envois son Hash, le client te confirme la réception, tu envoies le paquet puis le client confirme la réception. Si au bout d'un certain temps, le client ne reçois plus de paquet sans avoir reçu la confirmation de fin de transmission, c'est le client qui se connecte au serveur pour demander la suite. Si le client n'arrive pas à joindre le serveur, il se met en attente jusqu'à pouvoir réessayer.
Bref, un échange intelligent.
A creuser.
Le code sinon est simpliste, on en trouve un certain nombre comme celui-là sur internet. 6/10 donc.
13 mai 2016 à 03:27
svp aide moi :/
20 mars 2014 à 10:50
22 avril 2013 à 18:39
Sorpia.
30 août 2011 à 16:18
http://www.misfu.com/introduction-tcpip.html
Simon
28 août 2011 à 03:55
Je t'invite à voir ce projet : http://www.codeproject.com/KB/files/fastbinaryfileinput.aspx
Cordialement,
27 août 2011 à 15:29
Avant j'utilisais les méthodes ReadAllBytes/WriteAllBytes, qui sont très pratiques mais qui sont limitées; j'étais bloqué à environ 60mo.
Maintenant je lis le fichier par paquets de 32768 bits, paquets qui sont envoyés dans la foulée, et c'est pareil côté réception, le fichier est écrit petit à petit.
Après quelques tests, j'ai pu transférer un fichier de 6.4go, avec des perfs qui me semble correctes
16 août 2011 à 11:53
Comment le programme réagit au transfert de fichiers de plus de 10 GO ?
Cordialement,
10 août 2011 à 17:38
Merci de ton avis.
J'ai posté cette source volontairement simpliste parce que justement, je ne trouvais pas de code permettant un transfert fiable; les solutions proposées utilisent souvent les méthodes Read() et Write() des classes NetworkStream ou Socket, ce qui m'a donné des résultats très aléatoires.
Avec cette méthode, j'arrive à transférer un fichier audio de presque 8mo sans qu'il soit corrompu.
Cela dit, l'idée du checksum est bonne.
Concernant l'échange "intelligent", ça va un peu plus loin, mais c'est intéressant, j'essaierai d'adapter ça à l'occasion.
Encore une fois, le but de cette source est de donner une méthode simple et fiable pour transférer un fichier, je ne pense pas y apporter des modifs (ou alors, dans un zip à part)
10 août 2011 à 14:38
Des points à améliorer :
- Aucune protection dans ton code permet de vérifier que le fichier envoyé est bien celui réceptionné. Un simple Hash MD5 ferait l'affaire histoire d'apporter un brun de sécurité.
- D'autre part, tu pourrais implémenter une file FIFO afin de réceptionner chaque paquet permettant ainsi d'envisager l'interruption de l'envoi.
Lors de la communication de chaque paquet, tu envois son Hash, le client te confirme la réception, tu envoies le paquet puis le client confirme la réception. Si au bout d'un certain temps, le client ne reçois plus de paquet sans avoir reçu la confirmation de fin de transmission, c'est le client qui se connecte au serveur pour demander la suite. Si le client n'arrive pas à joindre le serveur, il se met en attente jusqu'à pouvoir réessayer.
Bref, un échange intelligent.
A creuser.
Le code sinon est simpliste, on en trouve un certain nombre comme celui-là sur internet. 6/10 donc.