- Seb,
Salut ,
Je suis dans la création d'un module de transfert de fichier. Je mettais penché vers socket.io-stream mais j'ai vite essayé de créer mon propre module en voyant ses performances médiocres…
Donc j'ai réfléchis et j'ai fais hier soir un petit code client/serveur:
-
le client choisit un fichier qu'il découpe en plusieurs chunks pour les envoyer au serveur.
-
le serveur réceptionne les chunks et reconstruit le fichier.
Sauf que lors de la réception, ça se passe pas totalement comme prévu, en effet en transférant une vidéo de 47mo, le serveur reconstruit un fichier de 67mo. En analysant les 2 fichier sur notepad, on remarque qu'il sont relativement proches mais pas totalement. Et je n'explique pas cette différence… Je me suis dis, ça vient peut être du découpage des chunks (en 65507o) mais en fait non ^^.
Voici les codes:
client.js :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | var net = require('net'); var fs = require("fs"); var client = new net.Socket(); client.connect(3333, '127.0.0.1', function() { console.log('Connected'); var filepath = 'files/video.mp4'; fs.readFile(filepath, {encoding: 'binary'}, function (err, data) { if (err) throw err; var position = 0; var chunkSize = 65507; var currentSize = 0; function chunking() { var next = position + chunkSize; var chunk = data.slice(position, next); client.write(chunk); currentSize += chunk.length; position += chunkSize; console.log(currentSize); } while(data.length != currentSize) chunking(); }); }); client.on('data', function(data) { console.log('Received: ' + data); }); client.on('close', function() { console.log('Connection closed'); }); |
server.js
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | var net = require('net'); var fs = require("fs"); var currentSize = 0; var stream = fs.createWriteStream("files/video2.mp4"); var server = net.createServer(function(socket) { socket.on('data', function (data) { currentSize += data.toString().length; console.log(currentSize); stream.write(data); }); }); stream.on('finish', function () { console.log('finished writing'); stream.end(); }); server.listen(3333, '127.0.0.1'); |